談到位元組序的問題,必然牽涉到兩大cpu派系。那就是motorola的powerpc系列cpu和intel的x86系列cpu。powerpc系列採用big endian方式儲存資料,而x86系列則採用little endian方式儲存資料。那麼究竟什麼是big endian,什麼又是little endian呢?
其實big endian是指低位址存放最高有效位元組(msb),而little endian則是低位址存放最低有效位元組(lsb)。
用文字說明可能比較抽象,下面用影象加以說明。比如數字0x12345678在兩種不同位元組序cpu中的儲存順序如下所示:
big endian
低位址 高位址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 12 | 34 | 56 | 78 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
little endian
低位址 高位址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 78 | 56 | 34 | 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
==================================
big endian machine: it thinks the first byte it reads is the biggest.
little endian machine: it thinks the first byte it reads is the littlest.
如果我們將0x1234abcd寫入到以0x0000開始的記憶體中,則結果為
big-endian little-endian
0x0000 0x12 0xcd
0x0001 0x23 0xab
0x0002 0xab 0x34
0x0003 0xcd 0x12
x86系列cpu都是little-endian的位元組序.
==================================
「endian」這個詞出自《格列佛遊記》。小人國的內戰就源於吃雞蛋時是究竟從大頭(big-endian)敲開還是從小頭(little-endian)敲開,由此曾發生過六次叛亂,其中乙個皇帝送了命,另乙個丟了王位。
==================================
最高有效位(msb)
指二進位制中最高值的位元。在16位元的數字音訊中,其第1個位元便對16bit的字的數值有最大的影響。例如,在十進位制的15,389這一數字中,相當於萬數那1行(1)的數字便對數值的影響最大。比較與之相反的「最低有效位」(lsb)。
==================================
編者注:
以前看過的一本嵌入式的書裡面這樣描述:
little-endian: lsb first.
big-endian: msb first.
而msb和lsb是這個意思:
msb:most significant bit(byte)
lsb:least significant bit(byte)
程式訪問記憶體變數時,先讀的位元組應該是低位址的位元組。msb
first應該就是指先讀到的是「最高有效位元組」,即最高有效位元組儲存在低位址。lsb first就是最低有效位元組儲存在低位址。
關於位元組序問題
位元組序分為主機位元組序和網路位元組序。主機位元組序主要分為兩種 大端位元組序 big endian 和小端位元組序 little endian 不同的處理器架構,有不同的位元組序。執行在同一臺計算機上的程序相互通訊時,一般不用考慮位元組序問題。位元組序是乙個處理器架構特性,用於指示像整數這樣的大資...
關於大字節序和小字節序
大字節序 計算機體系結構中一種描述多位元組儲存順序的術語,在這種機制中最重要位元組 msb 存放在最低端的位址上。採用這種機制的處理器有ibm3700系列 pdp 10 mortolora微處理器系列和絕大多數的risc處理器。把高有效位放在低位址段,例如在按位元組定址的儲存器中往位址 0x0001...
關於網路位元組序和主機位元組序
什麼是位元組序?是指整數在記憶體中儲存的順序。位元組序有兩種 a.little endinan 低位儲存在記憶體的低位址,高位儲存在記憶體的高位址 b.big endian 高位儲存在記憶體的低位址,低位儲存在記憶體的高位址 舉個簡單的例子 dword dwcount 0x01020304 這樣的乙...