【技巧】用union驗證機器為大端還是小端
阿新 • • 發佈:2019-02-20
union U{
short a;
char c;
};
U u;
在C Programming Language 一書中對於聯合體是這麼描述的:
1)聯合體是一個結構;
2)它的所有成員相對於基地址的偏移量都為0;
3)此結構空間要大到足夠容納最"寬"的成員;
4)其對齊方式要適合其中所有的成員;
所以一個聯合體在記憶體中的儲存形式如下圖:
從圖中,很容易看出變數a、c、u的地址都是0x20000000
u.a=0x1234;
小端模式(資料的高位元組儲存在記憶體的高地址中)下,儲存情況如下:大端模式下(資料的高位元組儲存在記憶體的低地址中),儲存情況如下:
所以,只要我們取出變數c的值,進行比對;若其值為34h,則機器為小端模式,若其值為12h,則機器為大端模式。
實現程式碼如下:
#include <stdio.h> union U{ int a; char c; }u; int main() { u.a=0x1234; if(0x34 == u.c) { printf("The machine is little-end.\n"); } else if(0x12 == u.c) { printf("The machine is big-end.\n"); } return 0; }