对于多字节的程序对象,在几乎所有的程序上,都被存储为连续的字节序列,对象的地址为所使用的字节中最小的地址,例如,假设一个类型为int的变量x的地址为0x100,也就是&x的值为0x100。那么,x的4个字节将被存储在存储器的0x100、0x101、0x102、0x103。
考虑一个w位的整数,位表示为[ xw−1,xw−2,...,x1,x0 ],其中 xw−1 是最高有效位,而 x0 是最低有效位。假设w是8的倍数,这些位就能被分组成为字节,其中最高有效字节包含位[ xw−1,xw−2,...,xw−8 ],而最低有效字节包含位[ x7,x6,...,x0 ]。某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高有效字节到最低有效字节的顺序存储。最低有效字节在最前面的方式,称为小端法(little endian),最高有效字节在最前面的方式,称为大端法(big endian)。
- 继续我们前面的示例,假设变量x类型为int,位于地址0x100处,它的十六进制表示为0x01234567。地址范围为0x100~0x103的字节,其排序依赖机器的存储规则。
大端法
0x100 0x101 0x102 0x103 01 23 45 67 小端法
0x100 0x101 0x102 0x103 67 45 23 01
判断机器大小端的方法
网上摘抄
1.#include <cstdio>
2.int checkSystem()
3.{
4. union check
5. {
6. int i;
7. char ch;
8. }c;
9. c.i=1;
10. return (c.ch==1);
11.}
12.int main()
13.{
14. checkSystem()==1 ? printf("Little-endian/n") : printf("Big-endian/n");
15. return 0;
16.}