端模式(endian
)的這個詞出自
jonathan swift
書寫的《格列佛遊記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為
big endian
,從尖頭開始將雞蛋敲開的人被歸為
littile endian
。小人國的內戰就源於吃雞蛋時是究竟從大頭(
big-endian
)敲開還是從小頭(
little-endian
)敲開。在計算機業
big endian
和little endian
也幾乎引起一場戰爭。在計算機業界,
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)
由上表所知,採用大小模式對資料進行存放的主要區別在於在存放的位元組順序,大端方式將高位存放在低位址,小端方式將 高位存放在高位址。採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。到目前為止,採用大端或者小端進行資料存 放,其孰優孰劣也沒有定論。
有的處理器系統採用了小端方式進行資料存放,如intel
的奔騰。有的處理器系統採用了大端方式進行資料存放,如
ibm半導體和
freescale
的powerpc
處理器。不僅對於處理器,一些外設的設計中也存在著使用大端或者小端進行資料存放的選擇。
因此在乙個處理器系統中,有可能存在大端和小端模式同時存在的現象。這一現象為系統的軟硬體設計帶來了不小的麻煩,這要求系統設計工程師,必須深入理解大端和小端模式的差別。大端與小端模式的差別體現在乙個處理器的暫存器,指令集,系統匯流排等各個層次中。
簡單的記法:大端順序,小端反
大端與小端
網際網路使用網路位元組順序採用大端模式進行編址,大端儲存也稱為網路位元組序,因為tcp ip包在網路中傳輸時都要求以這種次序,以其他形式儲存資料的機器 主機位元組順序根據處理器的不同而不同,如powerpc處理器,使用大端模式,而pentuim處理器使用小端模式 則必須在傳送資料之前把首部轉換成網路...
大端與小端
大端表示跟小端表示這兩者的具體意義我老是記不住,當然不是說它的意思不懂,而只是容易搞混。現在記一下,以後就比較有印象了。在c 中,定義乙個int值的時候,它所占用的記憶體是4個位元組,然而這4個位元組裡面,我們如果得到這個int值的記憶體位址,其實就是它的最低位置的位址,如 int a 假設 a的記...
大端與小端
用例 include bool isbigend bool isbigending obj obj.a 0x1234 if obj.b 0x12 return true else return false int main 分析 union 是利用了它的性質 所有成員從低位址開始存放 小端 0x00...