标题: 16进制数组转16进制长整形 [打印本页]

作者: sageliu    时间: 2019-9-21 16:58
标题: 16进制数组转16进制长整形
本帖最后由 sageliu 于 2019-9-21 17:04 编辑

Hi all
    我想把读取的16进制数组转16进制长整形,请大家帮忙给个提示,谢谢!!

unsigned char buf[5] = {0xEA,0xFC,0x10,0x20,0x40,0x55};

我想提取数组中buf[2],buf[3],buf[4]的数据,保存在long整形中如long aa=0x102040;一定是16进制格式,谢谢!!


作者: wulin    时间: 2019-9-21 18:41
long i;
i=(buf[2]<<16)|(buf[3]<<8)|buf[4];
作者: tyrl800    时间: 2019-9-21 18:43
long a;
  a=buf[2]*256+buf[3]*16+buf[4];

作者: csmyldl    时间: 2019-9-21 19:51
aa=buf[2]<<16+buf[3]<<8+buf[4]
作者: debugstm    时间: 2019-9-21 20:44
这个要看大端还是小端,具体自己测试一下 ,比如long aa=(buf[4]<<24)|(buf[3]<<16)|(buf[2]<<8)|buf[1],如果数据是反的 ,你就给long aa=(buf[1]<<24)|(buf[2]<<16)|(buf[3]<<8)|buf[4]
作者: sageliu    时间: 2019-9-22 10:11
wulin 发表于 2019-9-21 18:41
long i;
i=(buf[2]

谢谢你的回复,long a=buf[2]<<16|buf[3]<<8,输出a=0x1020,但是buf[2]<<16|buf[3]<<8|buf[4],a=0x1420,请问怎么修改,谢谢!,
作者: wulin    时间: 2019-9-22 11:27
sageliu 发表于 2019-9-22 10:11
谢谢你的回复,long a=buf[2]

你想保留数组2、4的高4位与数组3合成一个16位数据0x1420?
unsigned int i;
i=((buf[2]&0xf0)<<8)|((buf[4]&0xf0)<<4)|buf[3];
作者: sageliu    时间: 2019-9-22 12:43
wulin 发表于 2019-9-22 11:27
你想保留数组2、4的高4位与数组3合成一个16位数据0x1420?
unsigned int i;
i=((buf[2]&0xf0)

谢谢,我想转换成long a=0x102040,就是buf[2],buf[3],buf[4]的组合.




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1