一个变量中的32位十六进制

时间:2012-01-25 18:11:36

标签: c

如何将此十六进制0x0a01放入C中的32位var中。我要做的是解析协议。它的一部分有一个长度值。问题是我收到的数据包是一个数组,因此长度0x0a01将为0x0a on [1]和0x01 [2],我希望它们在一个var中都是0a01所以我可以运行比较常量或在for循环中使用。

2 个答案:

答案 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,因为如果buffchar数组并且char已签名,则会在促销时发生签名扩展当值为负时,buff[1]