大端(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...