C语言:判断计算机中数据存储是小端格式还是大端格式

计算机存储有小端格式也有大端格式

小端格式:低字节存放在低地址,高字节存放在高地址。

大端格式:高字节存放在低地址,低字节存放在高地址。

假如有int a = 0x12345678。这是一个四字节的整型数据。对于小端法和大端法,它们在内存中是怎样存储的呢?

C语言:判断计算机中数据存储是小端格式还是大端格式_第1张图片

 

现在,我们通过C语言来判断机器是小端格式存储还是大端格式存储:

思路:

在C语言中有一个数据结构联合体,联合体所以变量共享内存,并且联合体的内存大小根据最大字节变量确定。其他字节按照低地址连续存储。

譬如:int c = 0x12345678;

有这样一个联合体:

union oneMem
{
	char a;
	short b;
	int c;
};

我们让c = 0x12345678

如果是小端法,那么a = 0x78 ,b = 0x5678

C语言:判断计算机中数据存储是小端格式还是大端格式_第2张图片

如果是大端法,那么a = 0x12 , b = 0x1234

C语言:判断计算机中数据存储是小端格式还是大端格式_第3张图片

 

代码如下:

#include 

union oneMem
{
	char a;
	short b;
	int c;
};

int main()
{
	oneMem om;
	om.c = 0x12345678;
//	printf("a = : %x\n", om.a);
//	printf("b = : %x\n", om.b);
//	printf("c = : %x\n", om.c);
	if( om.a == 0x78 )
		printf("little endian\n");
	else if( om.a == 0x12)
		printf("big endian\n");
	else
		printf("error\n");
	return 0; 
}

 

你可能感兴趣的:(程序的各种算法问题)