C|大端、小端字节序各自优势及判断

我们知道:

数据:高位→低位,如0x04030201,04是高位,01是低。

内存:低地址→高地址,如0x00000000→0xFFFFFFFF。

另外,计算机是按字长(如32位、64位)来访问内存数据的,而内存是按字节为单位来存储和编址的。

对于32位机,int = 0x04030201需要4个字节来存储,首字节(低地址)是存储04还是01呢?存储04(高位)的称为大端CPU,存储01(低位)的称为小端CPU。

小端字节序优势↓

大端字节序优势↓

因为字节序可能存在的问题↓

如何判断自己电脑是采用的大端还是小端?

#include <stdio.h>
#include <stdlib.h>
void Endian()
{
	int val = 0x04030201;
	char firstByte = *(char*)&val;
	printf("%x",&val);
	if(firstByte==0x01)
		printf("Little-Endian(小端):首地址存储数据的低位\n");
	if(firstByte==0x04)
		printf("Big-Endian(大端):首地址存储数据的高位\n");
	char* p = &firstByte;
}
int main()
{
	Endian();

	int val = 0x41424344;
	FILE* fp;
	if((fp=fopen("test.txt","wb"))==NULL)
		return 0;
	fwrite(&val,sizeof(val),1,fp);
	fclose(fp);
	system("type test.txt"); //DCBA(小端CPU)

	if((fp=fopen("test.txt","rb"))==NULL)
	{printf("ss");
	return 0;}
	unsigned char buf[1024];
	if((fread(buf,sizeof(unsigned char),1024,fp))!=0)
	{
		int readVal = *(int*)&buf;
		printf("\n%x\n",readVal); // 41424344

	}
	fclose(fp);

 system("pause");
	return 0;
}
/*
Little-Endian(小端):首地址存储数据的低位
DCBA
41424344
*/

-End-

原文链接:,转发请注明来源!