OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5917|回复: 9

如何将多字节转换为1个10进制

[复制链接]

31

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2021-3-12
在线时间
49 小时
发表于 2022-1-23 14:54:21 | 显示全部楼层 |阅读模式
5金钱
QQ图片20220123145223.png QQ图片20220123145145.png 请教下各位大佬,2个字节转10进制为下面的写法 当4个字节转10进制的时候应该怎么处理 我写的方式哪儿出了问题???

最佳答案

查看完整内容[请看2#楼]

类型强制转化为uint32_t 再移位而已
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12989
金钱
12989
注册时间
2012-11-26
在线时间
3789 小时
发表于 2022-1-23 14:54:22 | 显示全部楼层
类型强制转化为uint32_t  再移位而已  
学无止境
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2022-1-23 16:59:09 | 显示全部楼层
一次移到8位试试
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2022-1-23 16:59:30 | 显示全部楼层
一次移动8位试试
回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2022-1-23 17:11:41 | 显示全部楼层

  1.     char buf[10]="00240A90";
  2.     int rev=0;

  3.     for(int i=0;i<8;i++)
  4.     {
  5.         if(buf[i]>=48&&buf[i]<=57){
  6.             rev|=(buf[i]-48)<<(28-i*4);
  7.         }
  8.         else if(buf[i]>=65&&buf[i<=90]){
  9.             rev|=(buf[i]-55)<<(28-i*4);
  10.         }
  11.     }

  12.     printf("rev=0x%x   %d ",rev,rev);
复制代码
回复

使用道具 举报

4

主题

456

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1072
金钱
1072
注册时间
2021-4-26
在线时间
352 小时
发表于 2022-1-23 18:03:27 | 显示全部楼层
  1. #include "stdio.h"

  2. int main() {
  3.         char buf[10] = "00240a90";
  4.         int rev = 0, i;
  5.         for (i = 0; buf[i] != '\0'; i++) {
  6.                 if (buf[i] >= 48 && buf[i] <= 57)
  7.                         rev += (int)(buf[i] - 48);
  8.                 else if (buf[i] >= 97 && buf[i] <= 122)
  9.                         rev += (int)(buf[i] - 87);

  10.                 rev *= 16;
  11.         }
  12.         printf("%d", rev / 16);
  13.         return 0;
  14. }
复制代码
回复

使用道具 举报

13

主题

643

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2432
金钱
2432
注册时间
2019-12-28
在线时间
527 小时
发表于 2022-1-24 10:58:18 | 显示全部楼层
楼上说的对
回复

使用道具 举报

31

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2021-3-12
在线时间
49 小时
 楼主| 发表于 2022-1-28 16:20:23 | 显示全部楼层
jermy_z 发表于 2022-1-23 14:54
类型强制转化为uint32_t  再移位而已

强制转换了的,修改后的代码为:uiint32_t g_data3;

                                                   g_data3=Rx_buf2[3];g_data3<<=8;
                                                   g_data3|=Rx_buf2[4];g_data3<<=8;
                                                   g_data3|=Rx_buf2[5];g_data3<<=8;            
                                                   g_data3|=Rx_buf2[6];
                                                    printf(“%d”,g_data3);串口输出是2704,我调试发现当输出的值大于32765的时候printf输出就会出错,这个是什么原因呢?按理讲32位4字节的话应该很大很大的呀

回复

使用道具 举报

31

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2021-3-12
在线时间
49 小时
 楼主| 发表于 2022-1-28 16:50:34 | 显示全部楼层

当我的值是变量时这个就不行啊,48 57这些数是啥意思?
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12989
金钱
12989
注册时间
2012-11-26
在线时间
3789 小时
发表于 2022-1-29 19:34:25 | 显示全部楼层
机智的杨柯基 发表于 2022-1-28 16:20
强制转换了的,修改后的代码为:uiint32_t g_data3;

                                              ...

这种问题,直接debug一下子就可以看出怎么变化的

如果只会单纯的printf

可能不太适合写代码
学无止境
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 03:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表