大端与小端
对于跨越多字节的程序对象, 我们必须建立两个规则:
- 这个对象的地址是什么
- 在内存中如何排列这些字节。
在几乎所有的机器上, 多字节对象都被存储为连续的字节序 列,对象的地址为所使用字节中最小的地址。
例如对于一个int
类型的变量来说,如果它的值为0x01234567
,如果该int
类型的变量的起始地址为0x100
,那么x的4个字节将被存储在内存的 0x100,0x101,0x102,0x103
四个位置。
那么其在内存中总共有两种表示方式,一种是高位在前(如下图上部分),一种是低位在前(如下图下部分),
对于这两种表示方法分别称为大端法(big endian)与小端法(little endian)
- 最高有效字节在最前面的方式, 称为大端法(big endian)
- 最低有效字节在最前面的方式, 称为小端法(little endian)
对于两种方法的区分可以如下记忆,以较小的位开始的存储方法称为小端法,以较大的位开始的存储方法称为大端法,这里的大小代表的是其真值的大小,例如对上例来说,值为2的位和值为6的位进行对比,前者的真值为
2
×
1
6
5
2\times 16^5
2×165,后者的真值为
6
×
1
6
1
6\times 16^1
6×161,故前者大于后者,则在存储时0x23
存储在0x67
前面的存储方法称为大端法(即大者在前)
其他注意事项
将存储在内存中的值写成正常格式时需要注意是大端还是小端,如果是大端法的话,则从左往右依次写出即为最终值,切记对于小端法不可以从右往左依次抄下来,在每一个字节内部又是顺序排列的,正确方法应该是从右往左逐字节去抄写即 01 → 23 → 34 → 67 01\rightarrow 23\rightarrow 34 \rightarrow 67 01→23→34→67