2014-02-15 81 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