大小端, 字节序

计算机内存的存储方式分为大端模式和小端模式, 

例如intel x86芯片, 使用的是小端模式,

arm的芯片, 默认使用小端模式, 但可以配置大小端.

mips以前全用大端模式, 现在也可以大小端配置.


1. 如何查看本机 是大端还小端模式,

    lscpu, 可查看

 

2. 何谓大小端

   总是记不住, 所以再捋一遍看能记住不...

 

8位, 16位, 32位数据, 有个字节序

以16位为例,  MSB - [15][14][13]...[0] - LSB

MSB: Most Significant Bit  - 最高有效位

LSB: Least Significant Bit  - 最低有效位

如0x1234 - 左侧最高位,  右侧最低位....

MSB - 0001 0010 0011 0100 - LSB

 


字节序好理解, 这个是确定的

比如usb setup请求的bmRequestType这个字节

D7:     方向 (0 - OUT, 1 - IN)

D6..5: 类型 (0 - Standard, 1 - Class, 2 - Vendor, 3 - Reserved)

D4..0: Recipient/收件人 (0 - Device, 1 - Interface, 2 - Endpoint, 3 - Other, 4..31 - Reserved)

 

D0 即 LSB

D7 即 MSB

这个数据在内存中如何存储, 即有个大小端的概念

字节序从左到右 D7 .... D0, 

内存0 - 4G内存,

如果内存 地址的顺序 和 字节序一样,

即字节序高位的数据,  存放在内存低地址, 字节序低位的数据, 存放在内存高地址,  

这个叫做大端, 

即跟人类思维一样, 数据字节序和内存增长方向一致, 叫做大端... 

(有人发明了一个叫法,  高尾端, 即人类思维里的尾巴, 即字节序的LSB, 放在高位地址 --- 高尾端)

大端 == 高尾端...

 

反之, 字节序和内存增长方向相反, 即和人类思维反过来的, 

高位数据存放在高地址,  低位数据存放在低地址, 这种叫做小端...

(有人叫他低尾端, 即人类思维里的尾巴在低位地址)

 

ok, 我也用了很多记忆方法, 实际使用的时候还是会混...

尝试用以下想法再记录下:

 

* 大部分电脑, x86, arm都是使用小端模式

* 人类和电脑时不一样的...

* 人类看数字的方向一般都是先左后右, 中国人开车司机也是做左边驾驶位,

    上厕所...男左女友,  戴婚戒...男左女右, 

    打麻将...左边是上家, 右边是下家...(逆时针的...)

    左青龙,  右白虎,

    当然以前对联是先右后左, 横批是右边读起, 门神是右边秦叔宝, 左边尉迟恭...

    因为古代写字都是右边打头...

* 不管了, 反正按现代人, 大多数情况,  字节序是先左后右, 内存布局0-4G 我们也是先左后右一行一行理解的...

   如果数据按字节序顺序存放在内存中,  即和人类思想一致, 那就是大端!!

* 可是大多数电脑和人类不一致...所以x86, arm默认都是小端!!


就这样吧, 看这次多久会忘...


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值