大小端詳解(通過C語言如何判斷)

2021-10-07 03:01:10 字數 1207 閱讀 3318

大端(big endian)和小端(little endian)的定義:

大端:高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端。cpu對運算元的存放方式是從高位元組到低位元組。

小端:低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。cpu對運算元的存放方式是從低位元組到高位元組。

舉例區分大小端

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

0x44

0x33

0x22

0x11

0x00

0x01

0x02

0x03

低位址  -->  高位址
0x11

0x22

0x33

0x44

0x00

0x01

0x02

0x03

低位址  -->  高位址
使用c語言判斷大小端

實現1:

#include

intmain()

// 指標型別轉換,最後取char*指標的值,判斷int低位址的資料是否為1

實現2:

#include

union endian

;int

main()

// union聯合體的特點是,使用聯合體中型別最大的值作為聯合體的大小。

// 所以,char a 使用的是int b的空間大小,判斷a的值,則判斷低位址的資料值

實現3:

#include

static

union

endian =};

#define endian (char)endian.b

intmain()

// 巨集定義 endian 取聯合體的低位元組資料

// 與低位址存放的資料進行比較

實現4:

#include

intmain()

// 直接指標操作,也是取低位址存放的資料值

C語言之大小端詳解

什麼是大小端呢?如果學完c語言你還不知道這個東西那就說明基礎太差了。假設我們有下面這個例子 int main 那麼這個a在記憶體中是怎麼儲存的呢?編譯器給出的結果是 看到這個結果是不是有點懵逼,a這個變數值是1 在記憶體中儲存應該是0x 00 00 00 01才對啊,為什麼編譯器給出的卻是0x 01...

C語言判斷大小端

思路 明確大小端 如圖示 程式思路 1 思考資料的儲存方式以及位址排列,int型 在32 位作業系統下 占有 4位元組,char 型 占有1字元,因此可以利用char 型指標判斷 int 型位址與資料 2 如 若有整形 int b 0x 77 ff 10 01,則我們知 0x 01 0x 10,0x...

C語言判斷大小端模式

1.大端模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 小端模式相反 2.為什麼有大小端之分?因為在計算機系統中,儲存是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組 8bit。在c語言中除了8bit的char之外,還有16bit的short型,32b...