首页 > 代码库 > 判断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式

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

第一个版本:

//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)函数来避开对宏的使用。