一雪前恥! 兩種方法判斷大小端模式

2021-10-10 11:33:21 字數 1105 閱讀 9481

#include int main()

else

return 0;

}

#include int main() un;

un.i = 1;

if(((int)(un.ch)) == 1)

else

return 0;

}

為啥叫一雪前恥呢。說來話長了哎。仍記得當初面試ge醫療,讓我手擼乙個判斷大小端的**,當場懵逼時候的情景。老實說,一直都記不清大端小端,作為api呼叫者,大小端的理論也沒深入理解過,所以想想寫不出來也是早就注定的結局。現如今,痛定思痛,痛改前非。待從頭,收拾舊山河,朝天闕。

說下我理解與記憶的方法吧:

資料的低位在記憶體的低位址就為小端模式,否則就是大端模式。

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;這和我們的閱讀習慣一致。

小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低。

下面以unsigned int value = 0x12345678為例,分別看看在兩種位元組序下其儲存情況,我們可以用unsigned char buf[4]來表示value

buffer

記憶體位址

小端模式(little-endian)存放內容

大端模式(big-endian)存放內容

buffer[0]

0x4000

0x78

0x12

buffer[1]

0x4001

0x56

0x34

buffer[2]

0x4002

0x34

0x56

buffer[3]

0x4003

0x12

0x78

參考文件:

大小端模式以及兩種判斷方法

首先來看某百科定義 這裡我們看到其實大端小端就是資料在記憶體中的存放的位元組順序。其實上面的定義有點兒難以記憶,總感覺很繞,乙個我覺得高效的記憶方式就是 之所以出現這樣的問題,是因為乙個位元組是8位,而現在cpu中的暫存器的位數是大於8的 一般來講,多少位的處理器暫存器就多少位 所以就存在乙個從記憶...

C語言判斷機器CPU大小端模式的兩種方法

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中。小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中。利用指標的強制型別轉換,取到低位址 include int main else if p 0x12 return 0...

判斷機器大小端的兩種實現方法

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