C語言基礎
union { uint32_t w; uint8_t b[4]; } u;
u.w = 0x12345678;
printf("%02X %02X\n", u.b[0], u.b[1]);uint32_t 與 uint8_t 分別是32位元與8位元的無號整數型別,且為小端序環境。執行上方程式碼時的輸出,下列何者正確?
- A12 34
- B78 56
- C87 65
查看答案與解析
正確答案:B. 78 56
聯合(union)的成員從同一位址開始重疊放置,因此 u.b[0]~u.b[3] 分別表示 u.w 的4個位元組。小端序把最低位的位元組放在最小的位址,因此 0x12345678 從小的位址開始依 78、56、34、12 的順序排列。所以 u.b[0] 為 0x78,u.b[1] 為 0x56。以不同於寫入時的成員讀取,可以像這樣用來調查位元組的順序,但結果會因端序而異。
- A. 這是大端序環境中的輸出。
- B. 正確。最低位的位元組 0x78 放在開頭的位址。
- C. 位元組的順序會相反,但1個位元組內的高4位元與低4位元不會互換。