我認爲我把自己與endianness和bit-shifting混淆了,請幫忙。將8位int轉換爲32位
我有4個8位整數,我想轉換爲32位整數。這是我在做什麼:
uint h;
t_uint8 ff[4] = {1,2,3,4};
if (BIG_ENDIAN) {
h = ((int)ff[0] << 24) | ((int)ff[1] << 16) | ((int)ff[2] << 8) | ((int)ff[3]);
}
else {
h = ((int)ff[0] >> 24) | ((int)ff[1] >> 16) | ((int)ff[2] >> 8) | ((int)ff[3]);
}
但是,這似乎產生了一個錯誤的結果。通過一點實驗,我意識到它應該是相反的:在大端序列的情況下,我應該將位移到右側,否則向左移位。但是,我不明白爲什麼。
這就是我的理解。 Big endian意味着最重要的字節在先(第一意味着最左邊,對嗎?也許這是我錯了)。所以,將8位整數轉換爲32位整型會將24個零預置到我現有的8位。所以,爲了使它成爲第一個字節,我需要將位24移到左邊。
請指出我錯在哪裏。
那麼,什麼是'ff [0] >> 24'?用手做,看看結果。這是對的嗎? – hyde
也許試圖與工會做? – AdamF
你說你得到了一個「錯誤的結果」。你得到了什麼結果,這與你的預期有什麼不同? –