大小字节序(big and little endian)

计算机中的数字往往大于一个字节,比如四个字节的int,这就会带来一个问题,如何储存这种多字节数据,以确保每个字节都有自己的地址。哪个字节应该被放在低位,哪个字节应该被放在高位。

没有“正确”的顺序来存储多字节数量的字节。硬件是为以特定顺序处理字节而构建的,只要兼容的硬件以相同的顺序读取字节,程序就没问题。我们将看两种主要类型的字节排序:小字节序和大字节序。

小字节序(little endian)

如果硬件会将多字节标量的最低有效字节存放在“第一位”(内存的最低位),那我们就说该硬件是“小字节序”。所以最小的那一端的数字会被先存到最低的内存地址去。

大字节序(big endian)

如果硬件会将多字节标量的最高有效字节存放在“第一位”(内存最低位),那我们就说该硬件是“大字节序”。最高有效位会被存到最低的内存地址。

例子:

假设我们现在有个四字节的整数0x44332211。 对于这个数字来说,最小端就是0x11,最大端就是0x44所以两种储存模式的地址如下。

如果我们memory dump(不知道怎么翻译了TAT)里的四位打印出来,我们知道,memory dump打印的时候,总是先打印地址低的,再打印地址高的。那么大字节序下储存的数字,就会像这样打印出来。

   ADDRESS: ---------- MEMORY BYTES ---------- 
       100: 00 44 33 22 11 00 00 00 00 00 ...

这就是大字节序的一个很好的性质,它被打印出来时,我们看到顺序的和手写数字顺序一样。

反之,小字节序打印出来就是:

   ADDRESS: ---------- MEMORY BYTES ---------- 
       100: 00 11 22 33 44 00 00 00 00 00 ...

这就与手写数字相反,很多时候需要反转输出。

对于字符数据来说,他们不会被大小字符存储方式影响,因为每个字符只占一个字节,所以都是从小到大储存的。

   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值