1. 程式人生 > >判斷機器大小端的兩種實現方法

判斷機器大小端的兩種實現方法

大端模式(Big-endian):

是指資料的低位(就是權值較小的後面那幾位)儲存在記憶體的高地址中,而資料的高位,儲存在記憶體的低地址

中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放;

小端模式(Little-endian):

是指資料的低位儲存在記憶體的低地址中,而數 據的高位儲存在記憶體的高地址中,和我們的邏輯方法一致。

判斷大小端方法:1、利用指標強制型別轉換2、利用共用體所有資料共用同一塊地址空間

1、利用指標強制型別轉換

#include<stdio.h>
int main()
{
	int a = 1;
	char * p = (char*)&a;
	if (*p == 1)
	{
		printf("little-endian");
	}
	else
	{
		printf("big-endian");
	}
	return 0;
}

如果小端方式中(i佔至少兩個位元組的長度)則i所分配的記憶體最小地址那個位元組中就存著1,其他位元組是0;大端的話則1在i的最高地址位元組處存放。char是一個位元組,所以強制將char型量p指向i則p指向的一定是i的最低地址,那麼就可以判斷p中的值是不是1來確定是不是小端。

2、利用共用體所有資料共用同一塊地址空間

#include<stdio.h>
union A
{
	char c;
	int  a;
}A;
int main()
{
	A.a= 1;
	if (A.c == 1)
	{
		printf("little-endian");
	}
	else
	{
		printf("big-endian");
	}
	return 0;
}
 聯合體union的存放順序是所有成員都從低地址開始存放,所以很容易就判別出機器的大小端了。 ^_^