1.什麼是大端 / 小端?
2.為什麼會有大小端之分呢?
3.怎麼判斷當前機器的位元組序?
什麼是大端 / 小端?
大端(儲存)模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中
小端(儲存)模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中
為什麼會有大小端之分呢?
因為在計算機系統中,我們以位元組為儲存單元,每個位址單元都對應著乙個位元組,乙個位元組為8bit。而在c語言中,不僅僅是乙個位元組來儲存乙個資料,除了乙個位元組的char,還有兩個位元組的short,四個位元組的int等等(看具體編譯器)。另外,對於位數大於8位的處理器,例如32位的處理器,由於暫存器的寬度大於乙個位元組,那麼就有如何將多個位元組進行排布的問題,於是就出現了大小端的問題。下面舉個栗子:(32位機)
怎麼測試我的電腦是小端模式還是大端模式呢?
1.將int 48存起來,然後取得其位址,再將這個位址轉為char* 這時候,如果是小端儲存,那麼char*指標就指向48;
48對應的ascii碼為字元『0』;
void judge_bigend_littleend1()
2.定義變數int i=1;將 i 的位址拿到,強轉成char*型,這時候就取到了 i 的低位址,這時候如果是1就是小端儲存,如果是0就是大端儲存。
void judge_bigend_littleend2()
3.定義聯合體,乙個成員是多位元組,乙個是單位元組,給多位元組的成員賦乙個最低乙個位元組不為0,其他位元組為0 的值,再用第二個成員來判斷,如果第二個位元組不為0,就是小端,若為0,就是大端。
void judge_bigend_littleend3()
un; un.i = 1;
if (un.c == 1)
printf("小端\n");
else
printf("大端\n");
}
1.什麼是大端 / 小端?
2.為什麼會有大小端之分呢?
3.怎麼判斷當前機器的位元組序?
判斷大端小端
大端模式 big endian 和小端模式 little endian 在我們傳送資料的時候,我們首先要確定是大端還是小端模式來進行的,在接收方接收的資料必須知道資料是大端還是小端模式,才能正確地讀取和儲存資料起來,否則就會出錯。有些時候cpu公司用大端 c51微控制器 有些cpu用小端 arm 我...
大端小端判斷
聯合體是共享記憶體,在聯合體重定義乙個char型別,乙個int型別,給int資料賦值為1,根據char的值是否為1就可以判斷大小端了 若char型別為1,則為小端 若char型別不為1,則為大端 判斷大小端 static bool islocalhostbigendian void num num....
判斷大端小端模式
試題1 請寫乙個 c函式,若處理器是 big endian 的,則返回 0 若是 little endian 的,則返回1 解答 int checkcpu c c.a 1 return c.b 1 剖析 嵌入式系統開發者應該對 little endian 和big endian 模式非常了解。採用 ...