将Big endian顺序的32位变量转换为Little Endian

时间:2014-02-15 22:46:54

标签: c++ c

我的服务器接收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,而是其他一些较大的数字。 我做错了什么?

1 个答案:

答案 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];