在C語言中,不同於結構體,共用體(聯合體)中的幾種不同類型的變量存放在同一段內存單元中。利用這一特點,可以用聯合體變量判斷ARM或x86環境下,存儲系統是是大端還是小端模式。
#include "stdio.h"
int main()
{
union w
{
int a; //4 bytes
char b; //1 byte
} c;
c.a=1;
if (c.b==1)
printf("It is Little_endian!\n");
else
printf("It is Big_endian!\n");
return 1;
}
說明:
1 在c中,聯合體(共用體)的數據成員都是從低地址開始存放。
2 若是小端模式,由低地址到高地址c.a存放爲0x01 00 00 00,c.b被賦值爲0x01;
————————————————————————————
地址 0x00000000 0x00000001 0x00000002 0x00000003
c.a 01 00 00 00
c.b 01 00
————————————————————————————
3 若是大端模式,由低地址到高地址c.a存放爲0x00 00 00 01,c.b被賦值爲0x0;
————————————————————————————
地址 0x00000000 0x00000001 0x00000002 0x00000003
c.a 00 00 00 01
c.b 00 00
————————————————————————————
4 根據c.b的值的情況就可以判斷cpu的模式了,現在XP環境下的intel
CPU是小端模式,不信你可測試下!