endian翻譯為「位元組序」,又稱端序,尾序。在
電腦科學領域中,位元組序是指存放多位元組資料的
位元組(byte)的順序,典型的情況是整數在
記憶體中的存放方式和
網路傳輸的傳輸順序。endianness有時候也可以用指位序(bit)。
一般而言,
位元組序指示了乙個ucs-2
字元的哪個位元組儲存在低位址。如果lsbyte在msbyte的前面,即lsb為低位址,則該
位元組序是小端序;反之則是大端序。在
網路程式設計中,
位元組序是乙個必須被考慮的因素,因為不同的
處理器體系可能採用不同的位元組序。在多平台的**程式設計中,
位元組序可能會導致難以察覺的
bug。
big endian:最低位位址存放高位
位元組,可稱高位優先,
記憶體從最低位址開始按順序存放(高數字數字先寫)。最高位
位元組放最前面。
little endian:最低位位址存放低位
位元組,可稱低位優先,記憶體從最低位址開始按順序存放(低數字數字先寫)。最低位位元組放最前面。
最低位位址存放高位位元組,可稱高位優先,記憶體從最低位址開始按順序存放(高數字數字先寫)。最高位位元組放最前面。
例如「漢」字的unicode編碼是6c49。如果將6c寫在前面,就是big endian。還是將49寫在前面,就是little endian
對於單一的
位元組(a byte),大部分
處理器以相同的順序處理
位元(bit),因此單位元組的存放方法和傳輸方式一般相同。
對於多 位元組資料,如整數(32位機中一般佔4位元組),在不同的
處理器的存放方式主要有兩種,以
記憶體中0x0a0b0c0d的存放方式為例,分別有以下幾種方式:
注: 0x字首代表十六進製制。
資料以8bit為單位:
位址增長方向 →
...
0x0a
0x0b
0x0c
0x0d
...
示例中,
最高有效位(msb, most significant byte)是0x0a 儲存在最低的
記憶體位址處。下乙個
位元組0x0b存在後面的位址處。正類似於十六進製制
位元組從左到右的閱讀順序。
資料以16bit為單位:
位址增長方向 →
...
0x0a0b
0x0c0d
...
最高的16bit單元0x0a0b儲存在低位。
測試大端小端的c**:
#include
int main()
else
return 0;
}
大端位元組序 小端位元組序(網路位元組序 主機位元組序)
大端位元組序 整數的高位位元組儲存在記憶體的低位址處,低位元組儲存在記憶體的高位址處。一般pc大多採用小端位元組序,也稱為主機位元組序。網路上傳輸採用大端位元組序,也稱為網路位元組序。linux中常用轉換函式如下 include uint32 t htonl uint32 t hostlong 無符...
位元組序和網路位元組序
1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...
位元組序和網路位元組序
1位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big en...