2014-02-15 43 views
0

我的服务器接收6个字节的数据:2个字节的头和1个变量由Big Endian顺序中的最后4个字节组成(在下例中,变量为100000小数)将32位变量以Big Endian顺序转换为Little Endian

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

的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]; 
+0

是的,这是这个数字! – maciekm

+0

它现在有效,thx。 – maciekm