来源 :今日头条@小智雅汇
我们知道: 数据: 高位→低位,如0x04030201,04是高位,01是低。 内存: 低地址→高地址,如0x00000000→0xFFFFFFFF。另外,计算机是按字长(如32位、64位)来访问内存数据的,而内存是按字节为单位来存储和编址的。
对于32位机,int = 0x04030201需要4个字节来存储,首字节(低地址)是存储04还是01呢? 存储04(高位)的称为大端CPU,存储01(低位)的称为小端CPU。
小端字节序优势↓
![5fd088898842f7f7c5631b78613550ed.png](https://i-blog.csdnimg.cn/blog_migrate/c901bfbf9697feb1872db91e910cac46.jpeg)
大端字节序优势↓
![1cae97c743540ed594f7b06a266112c4.png](https://i-blog.csdnimg.cn/blog_migrate/824f1a11001275133bb77519b60e66d2.jpeg)
因为字节序可能存在的问题↓
![1791480ebfa3d23dbb0a1e57f578a8f4.png](https://i-blog.csdnimg.cn/blog_migrate/bc4dc85c75429074a0cd10a1c33a5c98.jpeg)
#include
#include
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
*/
![0999d741fe1dc84e5a8a19b271dde79e.png](https://i-blog.csdnimg.cn/blog_migrate/144b741023728860904be625a0b804ba.jpeg)
![b9f1ccf9beb004e7d06fee54a9e55405.png](https://i-blog.csdnimg.cn/blog_migrate/8ae75826721e7a0dcdf1954cddf84bdb.jpeg)
-END-
推荐阅读
【01】在单片机(MCU)上运行Qt?Qt for MCUs 1.0正式发布 【02】手把手教你如何把C++的源程序改写成C语言 【03】C语言、嵌入式位操作精华技巧大汇总 【04】手把手教你嵌入式C语言优化技巧 【05】用C语言编程,如何节省存储空间? 免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除![4660d4e9163b58355ccb6176c40eb21d.png](https://i-blog.csdnimg.cn/blog_migrate/f14cfecf0f117d700460273933df9bc5.jpeg)