您的位置:首页 > 其它

判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式

2014-06-26 14:36 357 查看
第一个版本:

//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)函数来避开对宏的使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: