大端與小端儲存模式詳解

2021-09-30 10:22:28 字數 1678 閱讀 6207

分類: c/c++學習交流

2009-08-13 10:51

3241人閱讀收藏

舉報 儲存byte

ibm

端模式(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處理器。不僅對於處理器,一些外設的設計中也存在著使用大端或者小端進行資料存放的選擇。

因此在乙個處理器系統中,有可能存在大端和小端模式同時存在的現象。這一現象為系統的軟硬體設計帶來了不小的麻煩,這要求系統設計工程師,必須深入理解大端和小端模式的差別。大端與小端模式的差別體現在乙個處理器的暫存器,指令集,系統匯流排等各個層次中。

【用函式判斷系統是big endian還是little endian】

//如果位元組序為big-endian,返回true;

//反之為   little-endian,返回false

bool isbig_endian()

//isbig_endian()

大端與小端儲存模式詳解

端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian 這句話最為形象 小人國的內戰就源於吃雞蛋時是究竟從大頭 ...

大端與小端儲存模式詳解

端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian 這句話最為形象 小人國的內戰就源於吃雞蛋時是究竟從大頭 ...

大端與小端儲存模式詳解及使用

端模式 endian 的這個詞出自jonathan swift書寫的 格列佛遊記 這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian 這句話最為形象 小人國的內戰就源於吃雞蛋時是究竟從大頭 ...