1. 程式人生 > >大端和小端(Big endian and Little endian)

大端和小端(Big endian and Little endian)

tro big ttl class erp 順序 通過 網絡 rpc

1.大端和小端的問題

? 對於整型、長整型等數據類型,Big endian 人為第一個字節是最高位字節(按照從低地址到高地址的順序存放數據的高位字節到低位字節),而 Little endian 則相反,它認為第一個字節是低位字節(按照從低地址到高地址的順序存放數據的低位字節到高位字節)。

(1)例如,假設從內存地址 0x0000 開始有以下數據:

/*地址*/      0x0000      0x0001      0x0002      0x0003
/*數據*/      0x12        0x34        0xab        0xcd

? 如果我們去讀取一個地址為 0x0000 的四個字節變量,若字節序為 big-endian,則讀出結果為 0x1234abcd;若字節序為 little-endian,則讀出結果為 0xcdab3412。

(2)如果我們將 0x1234abcd 寫入到以 0x0000 開始的內存中,則 Little endian 和 Big endian 模式的存放結果如下:

/*地址*/              0x0000      0x0001      0x0002      0x0003
/*big-endian*/        0x12        0x34        0xab        0xcd 
/*little-endian*/      0xcd        0xab        0x34        0x12

(3)總結:一般來說,x86 系列 CPU 都是 little-endian 的字節序,PowerPc 通常是 big-endian,網絡字節序也是 big-endian。另外,有的 CPU 能通過跳線來設置 CPU 工作於 little endian 還是 big endian。

對於 0x12345678 的存儲:

小端模式:(從低字節到高字節)

低位地址 0x78 0x56 ox34 0x12 高位地址

大端模式:(從高字節到低字節)

低位地址 0x12 0x34 0x56 0x78 高位地址

大端和小端(Big endian and Little endian)