首页 > 其他 > 详细

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

时间:2017-06-19 19:27:31      阅读:260      评论:0      收藏:0      [点我收藏+]

第一个版本号:

//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)模式

原文:http://www.cnblogs.com/yxysuanfa/p/7049932.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!