大端序和小端序

什麼是大端序和小端序

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

相關文章
相關標籤/搜索