码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-06-19 19:47:03      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:div   内联   gen   var   static   track   size   code   pre   

第一个版本号:

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

标签:div   内联   gen   var   static   track   size   code   pre   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!