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。小人國的內戰就源於吃雞蛋時是...