本文共 811 字,大约阅读时间需要 2 分钟。
如果将0x1234abcd写入到以0x0000开始的内存中,则结果为:big-endian | little-endian | |
0x0000 | 0x12 | 0xcd |
0x0001 | 0x34 | 0xab |
0x0002 | 0xab | 0x34 |
0x0003 | 0xcd | 0x12 |
typedef unsigned char BYTE;int main(int argc, char* argv[]){ unsigned int num, *p; p = # num = 0; *(BYTE *)p = 0xff; if(num == 0xff) printf("The endian of cpu is little\n"); else /* num == 0xff000000 */ printf("The endian of cpu is big\n"); return 0;}实现同样的功能,我们来看看Linux操作系统中相关的源代码是怎么做的:
static union { char c[4]; unsigned long mylong;} endian_test = {'l', '?', '?', 'b'};#define ENDIANNESS ((char)endian_test.mylong)Linux内核作者们仅仅用一个union变量和一个简单的宏定义就实现了一大段代码同样的功能!以上一段代码我们可以看到Linux源代码的精妙之处! (如果ENDIANNESS='l',表示系统为little endian,为'b'表示big endian)
转载地址:http://vssli.baihongyu.com/