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

Posted yxysuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推断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)函数来避开对宏的使用。



以上是关于推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式的主要内容,如果未能解决你的问题,请参考以下文章

字节序:大端和小端(Big endian and Little endian)(转自维基百科)

小端格式和大端格式(Little-Endian&Big-Endian)

小端格式和大端格式(Little-Endian&Big-Endian)

小端格式和大端格式(Little-Endian&Big-Endian)

Motorola & Intel, Big Endian & Little Endian,大端和小端

数据在内存中存储的方式:大端模式与小端模式