一、什麼是位元組序
位元組序,顧名思義位元組的順序,再多說兩句就是大於乙個位元組型別的資料在記憶體中的存放順序(乙個位元組的資料當然就無需談順序的問題了)。
指的是記憶體的高、低位址,計算機在記憶體中存放資料的順序都是從低位址到高位址
高/低位元組:
有些文章中稱低位位元組為最低有效位,高位位元組為最高有效位。如果我們有乙個32位無符號整型0x12345678,那麼高位是什麼,低位又是什麼呢? 其實很簡單。
在十進位制中我們都說靠左邊的是高位,靠右邊的是低位,在其他進製也是如此。就拿 0x12345678來說,從高位到低位的位元組依次是0x12、0x34、0x56和0x78。
第一部分 基本概念
首先不管是大端法還是小端法儲存,計算機在記憶體中存放資料的順序都是從低位址到高位址,所不同的是首先取低位元組的資料存放在低位址還是取高位元組資料存放在低位址。
若首先取高位元組的資料存放在低位址,則是大端法;
若首先取低位元組的資料存放在低位址,則是小端法;
例如有資料0x01234567 (注意:左邊是高位元組,右邊是低位元組)
大端法存放:
存放的位址依次為:0x0001 0x0002 0x0003 0x0004
對應的資料依次為:0x01
0x23
0x45
0x67
小端法存放:
存放的位址依次為:0x0001 0x0002 0x0003 0x0004
對應的資料依次為:0x67
0x45
0x23
0x01
第二部分 判斷乙個機器是大端存放還是小端法存放
知道了大端和小端的定義,我們很容易寫**判斷乙個機器是大端還是小端:
int main(int argc, char* argv) c;
c.a = 0x0001;
if(c.b==1)
printf("small endian\n");
else if(c.b==0)
printf("big endian\n");
else
printf("error\n");
return 0; }
注意:之所以可以這樣寫來判斷是因為共用體中所有成員的存放順序是從低位址開始的。
下面乙個程式也可以來判斷機器的位元組序:
#include
using namespace std;
int main()
else
if (tp==0x34)//如果低位址部分取出的值是低位元組的值,則為小端
//注:本人電腦小端
return 0;
}
小端法 大端法
小端法little endian 諸如intel的機器就是採用這種規則 高位址存高位資料 大端法big endian 諸如ibm,motoral,sun採用此規則 低位址存高位資料 如需儲存oxeeaabbcc此數 如採用大端法儲存如下 address low high ee aa bb cc 如採...
大端法和小端法
在計算機記憶體中,通常是以位元組 byte 也就是 8 個位 bit 為基本儲存單元 也有以 16 位為基本儲存單元的 對於跨越多個位元組的資料型別 比如 int 長 4 個位元組 如何在記憶體中對這些位元組進行排序有兩種常見的方法 大端法 big endian 和小端法 little endian...
大端法,小端法位元組序
關於位元組序 大端法 小端法 的定義 也可以說 1.小端法 little endian 就是低位位元組排放在記憶體的低位址端即該值的起始位址,高位位元組排放在記憶體的高位址端。2.大端法 big endian 就是高位位元組排放在記憶體的低位址端即該值的起始位址,低位位元組排放在記憶體的高位址端。舉...