union和大小端

  Little endian 和Big endian 是CPU 存放数据的两种不同顺序. 对于整型、长整型等数据类型. Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节); 而Little endian 则相反, 它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节).

Address          0x0000    0x0001    0x0002    0x0003
big-endian        0x12      0x34      0xab      0xcd
little-endian     0xcd      0xab      0x34      0x12

  运用union的特性来判断CPU的大小端:

static union 
{ 
    char c[4]; 
    unsigned long mylong; 
} endian_test = {{ 'L', '?', '?', 'B' } };

#define ENDIANNESS ((char)endian_test.mylong)

  如果ENDIANNESS输出"L", 则为Little_endian; 如果输出"B", 则为Big_endian.

 

posted @ 2013-02-02 15:14  HelloMarvin  阅读(259)  评论(0)    收藏  举报