大端 小端和網路位元組序說明

計算機網路程式設計出現了網路位元組序的概念,從部落格上找到了一個詳細的說明,記錄下來。

大端 小端和網路位元組序說明

大端小端之分

小端位元組序和大端位元組序表示儲存的位元組順序有區別

小端位元組序

:低位元組存於記憶體低地址;高位元組存於記憶體高地址;

long型資料0x12345678

在小端系統中,

大端 小端和網路位元組序說明

記憶體的地址是由低到高的順序;而資料的位元組也是由低到高的。

大端位元組序

:高位元組存於記憶體低地址;低位元組存於記憶體高地址;

long型資料0x12345678

在大端系統中,

大端 小端和網路位元組序說明

記憶體的地址是由低到高的順序;而資料的位元組卻是由高到低的。

網路位元組序

網路上傳輸的資料都是位元組流,對於一個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第一個位元組的時候,它將這個位元組作為高位位元組還是低位位元組處理,是一個比較有意義的問題;

UDP/TCP/IP協議規定:把接收到的第一個位元組當作高位位元組看待,這就要求傳送端傳送的第一個位元組是高位位元組;而在傳送端傳送資料時,傳送的第一個位元組是該數值在記憶體中的起始地址處對應的那個位元組,也就是說,該數值在記憶體中的起始地址處對應的那個位元組就是要傳送的第一個高位位元組(即:高位位元組存放在低地址處);由此可見,多位元組數值在傳送之前,在記憶體中因該是以大端法存放的;

所以說,網路位元組序是大端位元組序;比如,我們經過網路傳送整型數值0x12345678時,在80X86平臺中,它是以小端發存放的,在傳送之前需要使用系統提供的位元組序轉換函式htonl()將其轉換成大端法存放的數值;

常見CPU的位元組序

Big Endian : PowerPC、IBM、Sun

Little Endian : x86、DEC

ARM既可以工作在大端模式,也可以工作在小端模式。

地址:https://www。cnblogs。com/langzou/p/9010899。html