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

[复制链接]
954|1
 楼主| xxbbzz1978 发表于 2023-5-10 11:34 | 显示全部楼层 |阅读模式
最近做了个小项目,需要用到2个字节数组转换成有符号的十进制整数。网上找了很多,大都是只能转正数,而负数部分没有。没有办法,只好根据自己的理解,用最笨的方法写了一个函数。自我感觉还挺好用,水平比较有限,让各位见笑。下边把代码贴出来,希望大家可以多多指点。
  1. long int char4_int(u8 b[4])
  2. {
  3.   long int a,c;
  4.               u8 d;
  5.           d=b[0]|0x7f;
  6.           if(d==0x7f)
  7.                 {
  8.                         printf("\r\n "+"");
  9.                         a=b[0]*256*256*256+b[1]*256*256+b[2]*256+b[3];
  10.                         c=a;
  11.                 }
  12.           else if(d==0xff)
  13.                 {
  14.                         printf("\r\n "-"");
  15.                         a=~(b[0]*256*256*256+b[1]*256*256+b[2]*256+b[3])+1;
  16.                         c=(-1)*a;
  17.           }
  18.         return c;
  19. }

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

粉丝
快速回复 在线客服 返回列表 返回顶部