大端 小端的儲存模式

2022-06-07 10:12:07 字數 1210 閱讀 1831

2023年11月23日

大端/小端的儲存模式

1.大端:

如果是將高位元組的資料儲存在低位址,低位元組資料儲存在高位址,這種儲存模式就是大端模式;

2.小端:

如果是將高位元組的資料儲存在高位址,低位元組資料儲存在低位址,這種儲存模式就是小端模式;

3.對大小端模式的測試方法:

1).使用union共用體進行測試:

#include #include 

//預設為小端模式;

//使用共用體測試;

union test

;void

main()

2).使用指標的方式:

#include #include 

//預設為小端模式;

//使用共用體測試;

void

main()

4.看似可行實則不行的測試大小端方式:位與(&)、移位(>>)、強制型別轉化(type)

(1)位與運算。

結論:位與的方式無法測試機器的大小端模式。(表現就是大端機器和小端機器的&運算後的值相同的)

理論分析:位與運算是編譯器提供的運算,這個運算是高於記憶體層次的(或者說&運算在二進位制層次具有可移植性,也就是說&的時候一定是高位元組&高位元組,低位元組&低位元組,和二進位制儲存無關)。

(2)移位

結論:移位的方式也不能測試機器大小端。

理論分析:原因和&運算子不能測試一樣,因為c語言對運算子的級別是高於二進位制層次的。右移運算永遠是將低位元組移除,而和二進位制儲存時這個低位元組在高位還是低位無關的。

(3)強制型別轉換

同上;5.通訊系統中的大小端(陣列的大小端)

(1)譬如要通過串列埠傳送乙個0x12345678給接收方,但是因為串列埠本身限制,只能以位元組為單位來傳送,所以需要發4次;接收方分4次接收,內容分別是:0x12、0x34、0x56、0x78.接收方接收到這4個位元組之後需要去重組得到0x12345678(而不是得到0x78563412).

(2)所以在通訊雙方需要有乙個默契,就是:先發/先接的是高位還是低位?這就是通訊中的大小端問題。

(3)一般來說是:先發低位元組叫小端;先發高位元組就叫大端。實際操作中,在通訊協議裡面會去定義大小端,明確告訴你先發的是低位元組還是高位元組。

(4)在通訊協議中,大小端是非常重要的,大家使用別人定義的通訊協議還是自己要去定義通訊協議,一定都要注意標明通訊協議中大小端的問題。

大端小端儲存模式

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

理解小端大端儲存模式

小端大端參考文章 位元組序 多位元組資料在記憶體中的儲存順序,分為 大端模式 和 小端模式 兩種儲存方法 小端模式 高位元組資料儲存在高位址 速記 小 小端 高 高位元組 高 高位址 大端模式 高位元組資料儲存在低位址 舉個例子 對於 32位整型資料 0x12345678,它在大端和小端兩種模式下是...

儲存器 大端模式與小端模式

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