如何将此十六进制0x0a01放入C中的32位var中。我要做的是解析协议。它的一部分有一个长度值。问题是我收到的数据包是一个数组,因此长度0x0a01将为0x0a on [1]和0x01 [2],我希望它们在一个var中都是0a01所以我可以运行比较常量或在for循环中使用。
答案 0 :(得分:6)
啊大多数当前平台中32位是int
(或stdint.h中定义的int32_t
)
并为此进行位操作:
int var = buff[1]<<8|buff[2];
<<
是左移,因此0x0a
转换为0x0a00
而|
是或运算符,以便正确合并
答案 1 :(得分:0)
uint32_t var;
char buff[128];
...
var = ((buff[1] & 0xFF) << 8) | (buff[2] & 0xFF);
请注意,我们使用(buff[1] & 0xFF) << 8
而非buff[1] << 8
,因为如果buff
是char
数组并且char
已签名,则会在促销时发生签名扩展当值为负时,buff[1]
。