大小端详解

大小端详解

大小端原理

大小端出现的原因在于:在计算机中,数据都是按照字节去进行存储的(所以如果是单字节的问题就不涉及到大小端),但是对于多字节(int,long等)就会涉及到数据的存储顺序的问题,这也就出现了两种常见的存储方式

  • Big endian : 大端存储,大端存储是高字节在前面(低地址),低字节在后面(高地址)
  • Little endiam :小端存储,小端存储是高字节在后面(高地址),低字节在前面(低地址)

不同的cpu可能有不同的模型

优点

  • 大端模式,由于高位在低地址,所以很容易判断正负
  • 小端模式,强制抓换数据的时候,不需要调整字节内容

以0x1234为例进行说明。

地址0x4000(低地址)0x4001(高地址)
大端存储0x120x34
小端存储0x340x12

大小端验证

C++验证

C++判断大小端可以借用Union,union在某种程度上和struct是一种数据结构

相同点

  • 都可以包含不同的数据类型和变量

不同点

  • struct是所有数据共存,有容乃大,不管struct内的数据结构用不用,都会为其分配内存
  • union是各种变量互斥的存在。其实就是共用一块内存地址。union的大小取决与里面内存对齐后最大的那个。

内存对齐知识点

这时候就可以利用union去判断大小端。

union U {
  char ch[4];
  int var;
} test;
这时候U的sizeof为4
我们进行如下的赋值操作
  test.ch[0] = 0x00u; // 低地址
  test.ch[1] = 0x00u; // +
  test.ch[2] = 0x00u; // +
  test.ch[3] = 0x01u; // 高地址

							   高位(32) -    -   低位(0)
如果是大端模式,那么高位放到低地址为 0x00u 0x00u 0x00u 0x01u
如果是小端模式,那么高位放在高地址为 0x01u 0x00u 0x00u 0x00u
如果test.val == 1那么就是大端模式,反之就是小端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值