大端和小端(Big endian and Little endian)
阿新 • • 發佈:2018-08-04
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)