- #include <stdio.h>
- static union{
- char c[4];
- unsigned long mylong;
- }endian_test={{'l','?','?','b'}};
- #define ENDIANNESS ((char)endian_test.mylong)
- int main(int argc,char* argv[])
- {
- if(ENDIANNESS=='l')
- printf("qiang,CPU type is little-endian! \r\n");
- if(ENDIANNESS=='b')
- printf("qiang,CPU type is big-endian! \r\n");
- return 0;
- }
联合体采用的内存共享存储,联合体的两个成员大小一样,都占用四个字节,所以联合体占用四个字节。假如联合体的起始地址为0x0000,则大端和小端两个CPU的数据存储方式如下:
地址 | 大端 | 小端 |
0x0003 | 1 | b |
0x0002 | ? | ? |
0x0001 | ? | ? |
0x0000 | b | 1 |
(char)endian_test.mylong进行强制类型转换,取得的是起始地址的数据。如果CPU为小端,则“ENDIANNESS”为1;如果CPU为大端,则“ENDIANNESS”为b