聯合體所有成員共享同一塊內存,這特性使其成為檢測CPU字節序(大小端模式)與類型轉換的利器。本文通過兩個經典案例深度解析聯合體內存佈局行為。
int checkSystem() {
union Check {
int i;
char ch;
} c;
c.i = 1; // 0x00000001
return (c.ch == 1); // 返回 1 表示小端模式
}
小端模式(x86/ARM 主流):低位字節存低地址
內存佈局:地址遞增 → [01] [00] [00] [00] ↑ c.ch 讀取到 0x01 → 返回 1
大端模式(網絡序/部分 RISC):高位字節存低地址
內存佈局:地址遞增 → [00] [00] [00] [01] ↑ c.ch 讀取到 0x00 → 返回 0

union ASCII {
char c;
short i;
} m;
m.i = 70;
cout << "ASCII碼為70的字符為:" << m.c << endl; // 輸出 'F'
m.c = 'a';
cout << "字符a的ASCII碼是" << m.i << endl; // 輸出 97
short 佔 2 字節,char 佔 1 字節,共享低地址字節:
m.i = 70 (0x0046) → 內存:[46] [00] m.c 讀取低字節 0x46 → 'F' m.c = 'a' (0x61) → 內存:[61] [00] m.i 讀取 0x0061 → 97
htonl/ntohl 內部原理)memcpy 或 union 類型遊覽