打印

十六进制数组转有符号十进制整数

[复制链接]
564|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxbbzz1978|  楼主 | 2023-5-10 11:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做了个小项目,需要用到2个字节数组转换成有符号的十进制整数。网上找了很多,大都是只能转正数,而负数部分没有。没有办法,只好根据自己的理解,用最笨的方法写了一个函数。自我感觉还挺好用,水平比较有限,让各位见笑。下边把代码贴出来,希望大家可以多多指点。
long int char4_int(u8 b[4])
{
  long int a,c;
              u8 d;
          d=b[0]|0x7f;
          if(d==0x7f)
                {
                        printf("\r\n \"+\"");
                        a=b[0]*256*256*256+b[1]*256*256+b[2]*256+b[3];
                        c=a;
                }
          else if(d==0xff)
                {
                        printf("\r\n \"-\"");
                        a=~(b[0]*256*256*256+b[1]*256*256+b[2]*256+b[3])+1;
                        c=(-1)*a;
          }
        return c;
}

8位单片机,因为参与计算的最大数据为256,所以,实际上前边的b[0]*256*256*256+b[1]*256*256结果为0。
如果是32位单片机,比如STM32则b[0]*256*256*256+b[1]*256*256应该实际参与计算中。菜鸟一枚,希望各位不吝赐教,在此表示感谢。

使用特权

评论回复

相关帖子

沙发
kingkits| | 2023-7-18 16:52 | 只看该作者
// 可以试试这个方案
uinon
{
    char buf[2];
    short int val;
}mydata;


{
    ...
    // 可以先给buf赋值
    mydata.buf[0] = 0xc0;
    mydata.buf[1] = 0x1;
    // 然后就可以用了
    result=mydata.val;
    ...
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝