我的服务器接收6个字节的数据:2个字节的头部和1个变量由Big Endian顺序的最后4个字节组成(例如下面的变量是100000十进制)
00000001 head
00000001
10100000 start 4 bytes of variable (100000 decimal)
10000110
00000001
00000000
我想使用下面的代码读取此变量(buf包含上面的数据)
unsigned char buf[MAX_s];
int32_t var = (buf[2] << 24) | (buf[3] << 16) | (buf[4] << 8) | buf[5];
printf(" %u \n",var);
但预期结果不是100000,而是其他一些较大的数字。 我做错了什么?
答案 0 :(得分:1)
您发布的6个字节(转换为十六进制)为:
01 01 A0 86 01 00
如果将字节2-5解释为大端,则组合数字为0xA0860100 = 2693136640。这是你得到的数字吗?
100000 = 0x000186a0。如果您希望数字为100000,则看起来您的字节流包含小端数据,而不是大端数据。反转转换器以解决此问题:
int32_t var = (buf[5] << 24) | (buf[4] << 16) | (buf[3] << 8) | buf[2];