arm 大端还是小端_C|大端、小端字节序各自优势及判断

我们知道:

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

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

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

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

小端字节序优势↓

86bac5395c39f8b2ea80f88145cd3637.png

大端字节序优势↓

29569c12c2091c1c46cdf7078f3faa88.png

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

55b3b4a1d24d1bbcbcfb4fecbc4524ef.png

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

#include #include void Endian(){int val = 0x04030201;char firstByte = *(char*)&val;printf("%x",&val);if(firstByte==0x01)printf("Little-Endian(小端):首地址存储数据的低位");if(firstByte==0x04)printf("Big-Endian(大端):首地址存储数据的高位");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("%x",readVal); // 41424344}fclose(fp); system("pause");return 0;}/*Little-Endian(小端):首地址存储数据的低位DCBA41424344*/
a3ad3dbfeb8a923ffee92b4200effb66.png
c27698bcbf42eec53ce83d6d36f84890.png

-End-

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值