大端小端之我見

2021-06-22 01:06:17 字數 1306 閱讀 8366

最近看資料的過程中,對大端和小段的問題又差點搞糊塗了,今天特意查了資料,總結了本文,讀起文件來,又酣暢了不少,所謂胸中有丘壑,自然心中不慌。

主要還是以前對大端小端的理解太膚淺,僅限於會解幾道題,今天讀了幾篇博文,發現大端小端還細分為位元組序和位元序,這才結了我心中疑惑。

1.首先講一下位元組序的規則,先科普一下,位元組是計算機儲存資料的基本單位,1byte=1b=8bit,廢話不多表,進入正題。大端還是小端是指位元組在記憶體中的儲存順序。大端位元組序,高位元組存於記憶體低位址,低位元組存於記憶體高位址;小端位元組序反之。(這句話是精華)

以64位為例,大端模式下64位資料匯流排(或外部匯流排)的msb是第0位,msb是資料匯流排(或外部匯流排)的第0~7的字段;而lsb是第63位,lsb是第56~63欄位。小端模式下64位匯流排的msb是第63位,msb是資料匯流排(或外部匯流排)的第63~56位,lsb是第0位,lsb是7~0欄位。

如乙個64位long型資料0x123456789abcdef0

大端位元組序:

記憶體高位址-->     0xf0

0xde

0xbc

0x9a

0x78      

0x56

0x34

記憶體低位址-->     0x12

小端位元組序:

記憶體高位址-->     0x12

0x34

0x56

0x78

0x9a

0xbc

0xde

記憶體低位址-->     0xf0

2.再來講一下位元組內的位元序,無論是大端還是小端,都有自己約定俗成的暫存器,資料匯流排的位元序定義,這一點在閱讀文件的時候就能體會到啦。

乙個採用大端模式的64位處理器,如基於freescale e6500核心的t4240qds,將其暫存器的最高位msb(most significant bit)定義為0,最低位lsb(lease significant bit)定義為63;而小端模式的64位處理器,將其暫存器的最高位定義為63,低位位址定義為0。

採用大端模式的64位處理器資料匯流排的最高位為0,最低位為31;採用小端模式的64位處理器的資料匯流排的最高位為31,最低位為0。如圖4.5所示。

大端:0------------------------------->63              

小端:63-------------------------------->0

圖:大小端模式處理器的暫存器的定義

還是以上述資料0x00000001為例,其在記憶體中的儲存

大端序:記憶體低位元位 00000001 記憶體高位元位

小端序:記憶體低位元位 10000000 記憶體高位元位

大端與小端

網際網路使用網路位元組順序採用大端模式進行編址,大端儲存也稱為網路位元組序,因為tcp ip包在網路中傳輸時都要求以這種次序,以其他形式儲存資料的機器 主機位元組順序根據處理器的不同而不同,如powerpc處理器,使用大端模式,而pentuim處理器使用小端模式 則必須在傳送資料之前把首部轉換成網路...

大端與小端

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

大端與小端

大端表示跟小端表示這兩者的具體意義我老是記不住,當然不是說它的意思不懂,而只是容易搞混。現在記一下,以後就比較有印象了。在c 中,定義乙個int值的時候,它所占用的記憶體是4個位元組,然而這4個位元組裡面,我們如果得到這個int值的記憶體位址,其實就是它的最低位置的位址,如 int a 假設 a的記...