C語言 機器字節序 大小端的判斷與修改

2021-08-11 18:47:36 字數 1292 閱讀 7774

一、機器字節序

1、int a = 1;

低位址                                  高位址

0x100        0x101        0x102      0x103

對於 int 型的整數1,對應的二進位制數為:

0000 0000      0000 0000      0000 0000      0000 0001

高位元組                                  低位元組

2、我們定義乙個整形變數a,假設其初始位址為0x100,結束位址為0x103,那麼0x100對應

低位址,0x103對應高位址。而對於二進位制資料,最前面為高位元組,最後面為低位元組,但

低位址存放高位元組還是低位元組呢?各個機器可能不同。

3、低位址存放高位元組為大端;低位址存放地位元組為小端;

二、那麼該如何判斷機器的位元組序呢?

我們可以使用聯合體,因為聯合體的成員共用一段記憶體。

**如下:

#include union test

;int main()

else if (t.array[0] == 1 && t.array[1] == 2)

else

return 0;

}

三、那麼如何實現大小端的轉換呢?

1、使用位運算    2、移位

那麼該如何移位呢?

定義乙個unsigned int a;

假設a的二進位制位:1011  1100  0001  1100  1110  0011  0011  0001

a & 0x0000 00ff << 24           0011  0001  0000  0000  0000  0000  0000  0000

a & 0x0000 ff00 << 8             0000  0000  1110   0011   0000  0000  0000  0000

a & 0x00ff   0000 >>8            0000  0000  0000  0000   0001  1100  0000  0000

a & 0xff00   0000 >>24          0000  0000  0000  0000  0000   0000 1011  1100

**例項:

#include int mian()

大小端位元組序的判斷

最近要重新研究linux網路程式設計,首先都遇到這個問題,記錄複習下吧 本文 大小端位元組序小端位元組序 little endian,將低位元組存放在記憶體的起始位址 大端位元組序 big endian,將高位元組存放在記憶體的起始位址。例如,數字index 0x11223344,在大小端位元組序方...

大小端位元組序的判斷

大小端位元組序是由於cpu和os對大於乙個位元組的變數各個位元組在記憶體中的儲存順序不同而產生的。以佔兩個位元組的十六進製制數0xabcd為例,小端位元組序 15 8 7 0 a bc d 15 8 7 0 c da b typedef unionto int main 網路位元組序統一為大端,主機...

怎麼判斷大小端(網路位元組序和主機位元組序)

怎麼判斷大小端 網路位元組序和主機位元組序 使用union進行判斷,這裡說一下能用union判斷的理由,union所佔的位元組數是union中成員的最大位元組數,也就是說成員們共用同一塊位址。include void byteorder test test.data 0x0102 if test.v...