利用指標判斷大小端模式

2022-09-19 21:24:19 字數 1348 閱讀 4822

資料在計算機中都是以二進位制形式存在的,二進位制數的最高為就是msb,最低位就是lsb。

比如以0x00000001為例:

它的二進位制:

00000000000000000000000000000001

| |msb lsb

msb:most significant bit (最高有效位),也就是最高位,最左側的bit.

lsb:least significant bit(最低有效位),也就是最低位,最右側的bit.

變數都是占用空間上的,對於多位元組型別,有int、short、double等。以int型別變數為例,int型別佔四個位元組,也就是32位,每個位元組空間都有乙個確定的位址,平時我們定義乙個int型別的變數:

int a = 1;
用乙個int型別的指標變數指向a:

int *p = &a;
此時可以用printf函式列印出p的值,一般p的值會是乙個類似0xe3f4a451的16進製制數,既然每個位元組空間都有乙個獨立的位址,那為什麼這裡列印int型別的位址只有乙個呢?這裡的指標p是乙個int型別的指標變數,大小為個4個位元組,儲存的是a變數的位址,然而a變數的位址並不是指四個位元組的每個位元組的位址,而是這四個位元組的第乙個位元組的位址,用這個位址來代表變數a的位址。a佔四個位元組,每個位元組都有自己的位址,位址最小的為低位址位元組,位址最大的為高位址位元組。

三、大端模式和小端模式

以0x00000001為例:

0x00

0x00

0x00

0x00

它的二進位制: 

00000000000000000000000000000001

| |msb lsb

四、用指標方式判斷大小端模式

#include int main(void

)

else

return0;

}

linux下gcc編譯執行結果:

五、總結

如果intel或amd cpu,基本都是小端序的。arm則不一定,有些是大端的,有些是小端的。51微控制器是大端序的。

新人才疏學淺,有錯的地方敬請指正!!

判斷大小端模式

學c語言時,了解過大小端模式,但是一直都每怎麼理解,對於網上查到的各種判斷大小端的程式也是看的一知半解。最近再次看到大小端這個問題時,終於感覺頓悟了。以下是我的理解,如有錯的地方請指出。大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中。小端模式,是指資料的高...

判斷系統大小端模式

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

如何判斷大小端模式?

大端模式就是低位元組儲存在高位址處而高位元組儲存在低位址處 小段模式就是低位元組儲存在低位址處而高位元組儲存在高位址處 根據這個特性,假設我們初始化了乙個int變數i為0x12345678,其位址為0x100,根據定義在小端模式下 0x100乙個位元組內的值為0x78,類推0x101 0x56,0x...