大端存储和小端存储_涨知识!C语言中大端、小端字节序各自优势及判断

f49616807008408b7123a05d1b396bb7.png

来源 :今日头条@小智雅汇

我们知道: 数据: 高位→低位,如0x04030201,04是高位,01是低。 内存: 低地址→高地址,如0x00000000→0xFFFFFFFF。
另外,计算机是按字长(如32位、64位)来访问内存数据的,而内存是按字节为单位来存储和编址的。
对于32位机,int = 0x04030201需要4个字节来存储,首字节(低地址)是存储04还是01呢? 存储04(高位)的称为大端CPU,存储01(低位)的称为小端CPU。
小端字节序优势↓ 5fd088898842f7f7c5631b78613550ed.png
大端字节序优势↓ 1cae97c743540ed594f7b06a266112c4.png
因为字节序可能存在的问题↓ 1791480ebfa3d23dbb0a1e57f578a8f4.png 如何判断自己电脑是采用的大端还是小端?
#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(小端):首地址存储数据的低位DCBA41424344*/
0999d741fe1dc84e5a8a19b271dde79e.png b9f1ccf9beb004e7d06fee54a9e55405.png

-END-

推荐阅读

【01】在单片机(MCU)上运行Qt?Qt for MCUs 1.0正式发布 【02】手把手教你如何把C++的源程序改写成C语言 【03】C语言、嵌入式位操作精华技巧大汇总 【04】手把手教你嵌入式C语言优化技巧 【05】用C语言编程,如何节省存储空间? 免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除 4660d4e9163b58355ccb6176c40eb21d.png
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值