第一个版本:
//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)函数来避开对宏的使用。
判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式,布布扣,bubuko.com
判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
原文:http://blog.csdn.net/linysuccess/article/details/34843567