给定一个32位整数0x1234abcd
,在内存里是怎么存放的呢?网络
假定存放这个整数的内存起始地址是0x0001,那么内存中存放这个整数有两个可能:架构
|0x0001|0x0002|0x0003|0x0004| | 12 | 34 | ab | cd |
或者:code
|0x0001|0x0002|0x0003|0x0004| | cd | ab | 34 | 12 |
第一种状况是高位字节在前,叫作大端序(big-endian)。
第二种状况是低位字节在前,叫作小端序(little-endian)。排序
不一样的CPU架构有不一样的选择,有的使用大端序存放整型、长整型;有的使用小端序存放整型、长整型。
x86架构的CPU都使用小端序,即低位字节放在前面。而POWER PC使用大端序。内存
一个整型数在网络中传输时,也有字节排序的问题。这是个约定俗成的问题。网络字节序就是big-endian,即排在前面的字节是高位字节。it
怎么判断本身使用的机器是大端序仍是小端序呢?使用下面的C程序:io
#include <stdio.h> int main(int argc, char *argv[]) { int i = 1; char *p = (char*)&i; if(p[0] == 1) { printf("little endian\n"); } else { printf("big endian\n"); } return 0; }
原理是取整型数1的第一个字节。若是是小端序存放,即低位字节在前,那这个字节的值必定是1;不然是0。原理