大端法 小端法 網路位元組序

2021-06-22 05:42:45 字數 1309 閱讀 7932

關於位元組序(大端法、小端法)的定義

《unxi網路程式設計》定義:術語「小端」和「大端」表示多位元組值的哪一端(小端或大端)儲存在該值的起始位址。小端存在起始位址,即是小端位元組序;大端存在起始位址,即是大端位元組序。

也可以說: 

1.小端法(little-endian)就是低位位元組排放在記憶體的低位址端即該值的起始位址,高位位元組排放在記憶體的高位址端。 

2.大端法(big-endian)就是高位位元組排放在記憶體的低位址端即該值的起始位址,低位位元組排放在記憶體的高位址端。

舉個簡單的例子,對於整形0x12345678。它在大端法和小端法的系統內中,分別如圖1所示的方式存放。

網路位元組序

我們知道網路上的資料流是位元組流,對於乙個多位元組數值,在進行網路傳輸的時候,先傳遞哪個位元組?也就是說,當接收端收到第乙個位元組的時候,它是將這個位元組作為高位還是低位來處理呢? 

網路位元組序定義:收到的第乙個位元組被當作高位看待,這就要求傳送端傳送的第乙個位元組應當是高位。而在傳送端傳送資料時,傳送的第乙個位元組是該數字在記憶體中起始位址對應的位元組。可見多位元組數值在傳送前,在記憶體中數值應該以大端法存放。 

網路位元組序說是大端位元組序。 

比如我們經過網路傳送0x12345678這個整形,在80x86平台中,它是以小端法存放的,在傳送前需要使用系統提供的htonl將其轉換成大端法存放,如圖2所示。

位元組序測試程式 

不同cpu平台上位元組序通常也不一樣,下面寫個簡單的c程式,它可以測試不同平台上的位元組序。

1 #include

<

stdio.h

>

2 #include

<

netinet/in

.h>

3 int

main()4 

在80x86cpu平台上,執行該程式得到如下結果: 

[0]:0x78 

[1]:0x56 

[2]:0x34 

[3]:0x12

[0]:0x12 

[1]:0x34 

[2]:0x56 

[3]:0x78

分析結果,在80x86平台上,系統將多位元組中的低位儲存在變數起始位址,使用小端法。htonl將i_num轉換成網路位元組序,可見網路位元組序是大端法。

總結點:80x86使用小端法,網路位元組序使用大端法。

大端法 小端法 網路位元組序

unxi網路程式設計 定義 術語 小端 和 大端 表示多位元組值的哪一端 小端或大端 儲存在該值的起始位址。小端存在起始位址,即是小端位元組序 大端存在起始位址,即是大端位元組序。也可以說 1.小端法 little endian 就是低位位元組排放在記憶體的低位址端即該值的起始位址,高位位元組排放在...

大端法 小端法 網路位元組序

關於位元組序 大端法 小端法 的定義 也可以說 1.小端法 little endian 就是低位位元組排放在記憶體的低位址端即該值的起始位址,高位位元組排放在記憶體的高位址端。2.大端法 big endian 就是高位位元組排放在記憶體的低位址端即該值的起始位址,低位位元組排放在記憶體的高位址端。舉...

大端法 小端法 網路位元組序

關於位元組序 大端法 小端法 的定義 unxi網路程式設計 定義 術語 小端 和 大端 表示多位元組值的哪一端 小端或大端 儲存在該值的起始位址。小端存在起始位址,即是小端位元組序 大端存在起始位址,即是大端位元組序。也可以說 1.小端法 little endian 就是低位位元組排放在記憶體的低位...