大端和小端的問題

大寫的ZDQ發表於2019-04-03

大端和小端的問題

對於整型、長整型等資料型別,Big endian 認為第一個位元組是最高位位元組(按照從低地址到高地址的順序存放資料的高位位元組到低位位元組);而 Little endian 則相反,它認為第一個位元組是最低位位元組(按照從低地址到高地址的順序存放據的低位位元組到高位位元組)。

例如,假設從記憶體地址 0x0000 開始有以下資料:
0x0000 0x0001 0x0002 0x0003
0x12 0x34 0xab 0xcd
如果我們去讀取一個地址為 0x0000 的四個位元組變數,若位元組序為big-endian,則讀出結果為0x1234abcd;若位元組序為little-endian,則讀出結果為0xcdab3412。

如果我們將0x1234abcd 寫入到以 0x0000 開始的記憶體中,則Little endian 和 Big endian 模式的存放結果如下:
地址 0x0000 0x0001 0x0002 0x0003
big-endian 0x12 0x34 0xab 0xcd
little-endian 0xcd 0xab 0x34 0x12

一般來說,x86 系列 CPU 都是 little-endian 的位元組序,PowerPC 通常是 big-endian,網路位元組順序也是 big-endian還有的CPU 能通過跳線來設定 CPU 工作於 Little endian 還是 Big endian 模式。

對於0x12345678的儲存:

小端模式:(從低位元組到高位元組)
地位地址 0x78 0x56 0x34 0x12 高位地址

大端模式:(從高位元組到低位元組)
地位地址 0x12 0x34 0x56 0x78 高位地址

相關文章