1. 程式人生 > >推斷CPU 是小端存儲(Little endian)還是大端存儲(Big endian)模式

推斷CPU 是小端存儲(Little endian)還是大端存儲(Big endian)模式

art div 版本 ack 一個 fine name clas char

第一個版本號:

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