C C 之大端模式和小端模式

2021-08-15 16:11:59 字數 1391 閱讀 5521

byte endian是指位元組在記憶體中的組織,所以也稱它為byte ordering或byte order。對於資料中跨越多個位元組的物件, 我們必須為它建立這樣的約定:

(1) 它的位址是多少?

(2) 它的位元組在記憶體中是如何組織的?

對於跨越多個位元組的物件,一般它所佔的位元組都是連續的,它的位址等於它所佔位元組最低位址

。(鍊錶可能是個例外, 但鍊錶的位址可看作煉表頭的位址)。比如: int x,它的位址為0×100。那麼它佔據了記憶體中的0x100, 0×101, 0×102, 0×103這四個位元組(32位系統,int占用4個位元組)。

上面只是記憶體位元組組織的一種情況,多位元組物件在記憶體中的組織一般有兩種約定。 例如乙個w位的整數,它的各位表達如下:[xw-1, xw-2, ... , x1, x0],它的msb(most significant byte)為 [xw-1, xw-2, ... xw-8];lsb (least significant byte)為 [x7,x6,..., x0]。lsb和msb誰位於記憶體的最低位址,即誰代表該物件的位址,這就引出了大端(big endian)與小端(little endian)的問題

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x78

0x56

0x34

0x12

而在大端模式cpu記憶體中的存放方式則為:

記憶體位址

0x4000

0x4001

0x4002

0x4003

存放內容

0x12

0x34

0x56

0x78

首先我們要知道一點,記憶體位址是從小到大順序增長的

。因此,如果定義乙個變數,變數的位址就是0x4000。採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理

。下面通過程式判斷大小端

聯合體測試大端小端

使用指標強制轉換

小端模式和大端模式 大端模式和小端模式

0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...

大端模式和小端模式

大端模式和小端模式 在c語言中除了8位的char型之外,還有16 位的short型,32 位的long型 要看具體的編譯器 對於位數大於8位的處理器,例如16位或者32位的處理器,由於暫存器寬度大於乙個位元組,那麼必然 存在著如何將多個位元組安排的問題。因此就導致了大端儲存模式和小端儲存模式。大端模...

大端模式和小端模式

所謂的大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中...