Union 公用體判斷大小端模式

2021-07-09 13:41:26 字數 667 閱讀 6721

通過使用union可以知道自己所用的編譯器是大端模式還是小端模式。

例1:

#includeusing namespace std;

union un

u;int main()

else if(u.ch == 0)

//輸出位址看一下

cout<

.號的優先順序高於&運算子,所以加不加括號都是乙個效果。

上面的&u.ch和&(u.ch)是等效的。

例2:union

sint;

struct

sch;

}un;

int main()

輸出結果顯示:

解析:通過輸出結果可以看出:

1)在結構體內部,元素的位址是連續的。

2)union內部的位址,i,m,ch1的位址是相同的,最先定義的對齊。

3)大小端問題:

低位址存低位元組,高位址存高位元組是小端模式。反之,是大端模式。

struct sch中有4個char型的變數,記憶體位址分別對應i的int型位址。

本例中ch1是低位址,對應i的0x78低位元組的值,所以是小端模式。

用union判斷cpu的大小端

版本1 在arm體系中,每個字單元包含4個位元組單元或者兩個半字單元。在字單元中,4個位元組哪乙個是高位位元組,哪乙個是低位位元組則有兩種不同的格式 big endian和little endian格式。在小端模式中,低位位元組放在低位址,高位位元組放在高位址 在大端模式中,低位位元組放在高位址,高...

利用union判斷系統的大小端

大端模式 所謂的大端模式,是指資料的高位,儲存在記憶體的低位址中,而資料的低位,儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 小端模式 所謂的小端模式,是指資料的高位儲存在記憶體的高位址中,而數 據的低位儲存在記憶體的低位址中,這種...

利用union判斷系統的大小端

int checkcpuendian 返回1,為小端 反之,為大端 c c.a 1 return 1 c.b 大端模式 big endian 是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從...