天天看點

大端和小端

一、大端與小端的概念

大端與小端是用來描述多位元組資料在記憶體中的存放順序,即位元組序。

  • 大端(Big Endian)是指低位址端存放高位位元組;
  • 小端(Little Endian)是指低位址端存放低位位元組。

舉一個例子,比如數字0x12 34 56 78在記憶體中的表示形式為:

1.大端模式:

低位址 —————–> 高位址

0x12 | 0x34 | 0x56 | 0x78

2.小端模式:

低位址 ——————> 高位址

0x78 | 0x56 | 0x34 | 0x12

short int x;
char x0,x1;
x=;
x0=((char*)&x)[]; //低位址單元
x1=((char*)&x)[]; //高位址單元
           

Big Endian:符号位的判定固定為第一個位元組,容易判斷正負。

Little Endian:長度為1,2,4位元組的數,排列方式都是一樣的,資料類型轉換非常友善。

需要記住計算機是以位元組為存儲機關。

不同的CPU架構有不同的選擇,有的使用大端序存放整型、長整型;有的使用小端序存放整型、長整型。

x86架構的CPU都使用小端序,即低位位元組放在前面。而POWER PC使用大端序。

一個整型數在網絡中傳輸時,也有位元組排序的問題。這是個約定俗成的問題。網絡位元組序就是big-endian,即排在前面的位元組是高位位元組。

二、如何判斷大端和小端

怎麼判斷自己使用的機器是大端序還是小端序呢?使用下面的C程式:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i = ;
    char *p = (char*)&i;
    if(p[] == ) {
        printf("little endian\n");
    }
    else {
        printf("big endian\n");
    }
    return ;
}
           

原理是取整型數1的第一個位元組。如果是小端序存放,即低位位元組在前,那這個位元組的值一定是1;否則是0。

繼續閱讀