大端和小端(網絡字節序和主機字節序):
大端(Big Endian):即網絡字節序。
小端(Littile Endian):即主機字節序。
記憶方式:網絡的範圍很大,所以大端是網絡字節序。
大端方式將高位存放在低地址,小端方式將低位存放在高地址。
採用大端方式進行數據存放符合人類的正常思維,而採用小端方式進行數據存放利於計算機處理。
如果將一個32位的整數0x12345678存放到一個整型變量(int)中,這個整型變量採用大端或者小端模式在內存中的存儲由下表所示。
爲簡單起見,本書使用OP0表示一個32位數據的最高字節MSB(Most Significant Byte),使用OP3表示一個32位數據最低字節LSB(Least Significant Byte)。
---------------------------
地址偏移 大端模式 小端模式
0x00 12(OP0) 78(OP3)
0x01 34(OP1) 56(OP2)
0x02 56(OP2) 34(OP1)
0x03 78(OP3) 12(OP0)
---------------------------
如果將一個16位的整數0x1234存放到一個短整型變量(short)中。這個短整型變量在內存中的存儲在大小端模式由下表所示。
---------------------------------
地址偏移 大端模式 小端模式
0x00 12(OP0) 34(OP1)
0x01 34(OP1) 12(OP0)
-------------------------------------
不同的CPU上運行不同的操作系統,字節序也是不同的,參見下表。
處理器 操作系統 字節排序
Alpha 全部 Little endian
HP-PA NT Little endian
HP-PA UNIX Big endian
Intelx86 全部 Little endian <-----x86系統是小端字節序系統
Motorola680x() 全部 Big endian
MIPS NT Little endian
MIPS UNIX Big endian
PowerPC NT Little endian
PowerPC 非NT Big endian <-----PPC系統是大端字節序系統
RS/6000 UNIX Big endian
SPARC UNIX