判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
第一个版本:
//return true in big-endian machines
bool check_big_endian1()
{
int a = 0;
int *p = &a;
*(char *)p = 1;
return a != 1;
}
采用union的第二个版本:
//return true in big-endian machines
bool check_big_endian2()
{
union{
int a;
char b;
}var;//sizeof(var)=4
var.a = 1;
return var.b != 1;
}
最后看一个避免函数调用的版本:
static union
{
int a;
char b;
}_s_var_endian_check = {1};
#define ISLITTLEENDIAN (_s_var_endian_check.b == 1)
#define ISBIGENDIAN !ISLITTLEENDIAN
这样就可以通过宏ISLITTLEENDIAN和ISBIGENDIAN读取静态变量的值来判断是否是小端模式或者大端模式了。
不过这是C的写法,C++里面可以采用内联(inline)函数来避开对宏的使用。