很多书籍中会提到“大端”和“小端”的说法。所谓“大端”和“小端”存储指的是计算机中多于一个字节的数据在内存中的存放方式。某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高有效字节到最低有效字节的顺序存储。前一种规则—最低有效字节在最前面的方式,称为小端法(little endian)。大多数Intel 兼容机都采用这种规则。后一种规则—最高有效字节在最前面的方式,称为大端法(big endian)
例如:一个int类型的值0x12345678,在32位计算机中占4个字节。假设其在内存中的地址为:0x101~0x103,那么大端法和小端法表示分别为:
目前大多数的计算机使用的都是“小端”法
而网络字节序使用的是(big endian)大端法
可以使用c代码来验证,下面的c程序实现把int类型数据各字节的值依次打印出来
#include <stdio.h> typedef unsigned char *byte_pointer; void show_bytes(byte_pointer start,int len) { int i; for(i = 0; i < len; i++) { printf("%.2x",start[i]); printf("\n"); } } void show_int(int x) { show_bytes((byte_pointer)&x,sizeof(int)); } void test_show_bytes(int val) { int ival = val; show_int(ival); }
调用test_show_bytes(12345)的输出结果如下图:
十进制 12345的十六进制表示为0x3039,输出结果39 30 00 00 是从低位到高位依次打印出数据,可以看出所使用的计算机字节序为小端存储。