今晚看书发现C/C++的结构体都有一个非常有趣的特性,就是位字段。即允许指定占用特定位数的结构成员,字段的类型应为整型或枚举,如:
struct test
{
unsigned int SN:4;
bool goodIn:1;
};
我觉得可以利用这个特性来判断计算机的大小端,为此写出测试程序如下:
#include <stdio.h>
struct checkCPU
{
unsigned int endian_test: 8;
}w;
int main(void)
{
w.endian_test = 0x12345678;
printf("%x/n", w.endian_test);
return 0;
}
输出的结果是:78,表明是小端,这与想像中吻合。
一般的做法是这样:
/*
* main.c
*
* Created on: 2010-9-12
* Author: zhujiang
*/
#include <stdio.h>
int checkCPU()
{
union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}
int main()
{
checkCPU()?printf("little-endian/n"):printf("big-endian/n");
return 0;
}
我们来看看LINUX的内核作者是怎么写的:
|
非常巧妙地完成相同的功能。