給定一個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。原理