首先,認識字節(Byte),計算機中Byte意思為“字節”,8個二進制位構成1個"字節(Byte)",即1Byte=8bit,字節是計算機處理數據的基本單位。所謂的大字端(Big Endian)和小字端(Little Endian)就是在存儲數據時遵循不同的字節排列順序,即字節序(Byte Order)不同。
1.含義
Big Endian:按照從低地址到高地址的順序存放數據的高位字節到低位字節,就是高位數字存儲在前面,例如:整數(int)573785173用十六進制表示就是0x22334455,其中“0x”是十六進制的標識符。這個數字有四個字節構成,字節值分別為0x22、0x33、0x44和0x55。在二進制文件中如果是按照大字端(Big Endian)的形式存儲,那么在文件中的順序是這樣:0x22、0x33、0x44、0x55,符合人類的正常思維。
其中: 0x22被稱為最高有效字節(most significant byte, MSB);
0x55被稱為最低有效字節(last significant byte, LSB)。
Little Endian: 按照從低地址到高地址的順序存放數據的低位字節到高位字節,就是低位數字在前面。同樣以上面的數字為例。0x22334455如果按照小字端(Little Endian)的形式存儲,那么它的字節值存儲順序為0x55、0x44、0x33、0x22。
2. 二者的對比
整數573785173的16進制表示: 0x22334455
假設存儲地址: 0x0155a800 0x0155a801 0x0155a802 0x0155a803
Big Endian法: 0x22 0x33 0x44 0x55
Little Endian: 0x55 0x44 0x33 0x22
3.為什么要有大字端和小字端的區別?
這其實與計算機的環境或CPU有關,對於大部分的CPU來說,字節都是按照Little形式存儲的,但是在一些情況下可能是按照Big形式存儲的,如在網絡上傳輸數字時。
4、常見字節序
一般操作系統是小端,通訊協議時大端。
CPU字節序。。。
文件字節序。。。
JAVA和網絡通信協議使用 Big-Endian編碼