第一个版本号:
//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)函数来避开对宏的使用。