網路位元組序和主機位元組序

2021-04-13 08:10:38 字數 2290 閱讀 9611

不同的

cpu有不同的位元組序型別

這些位元組序是指整數在記憶體中儲存的順序

這個叫做主機序

最常見的有兩種1.

little endian2.

big endian

le little-endian 

最符合人的思維的位元組序

位址低位儲存值的低位

位址高位儲存值的高位

怎麼講是最符合人的思維的位元組序,是因為從人的第一觀感來說

低位值小,就應該放在記憶體位址小的地方,也即記憶體位址低位

反之,高位值就應該放在記憶體位址大的地方,也即記憶體位址高位

be big-endian 

最直觀的位元組序

位址低位儲存值的高位

位址高位儲存值的低位

為什麼說直觀,不要考慮對應關係

只需要把記憶體位址從左到右按照由低到高的順序寫出

把值按照通常的高位到低位的順序寫出

兩者對照,乙個位元組乙個位元組的填充進去

例子:在記憶體中雙字

0x01020304(dword)

的儲存方式

記憶體位址

4000 4001 4002 4003 

le 04 03 02 01 

be 01 02 03 04 

例子:如果我們將

0x1234abcd

寫入到以

0x0000

開始的記憶體中,則結果為

big-endian  little-endian

0x0000  0x12      0xcd

0x0001  0x23      0xab

0x0002  0xab      0x34

0x0003  0xcd      0x12

x86系列

cpu都是

little-endian

的位元組序

. 網路位元組順序是

tcp/ip

中規定好的一種資料表示格式,它與具體的

cpu型別、作業系統等無關,從而可以保證資料在不同主機之間傳輸時能夠被正確解釋。網路位元組順序採用

big endian

排序方式。

為了進行轉換

bsd socket

提供了轉換的函式

有下面四個

htons 

把unsigned short

型別從主機序轉換到網路序

htonl 

把unsigned long

型別從主機序轉換到網路序

ntohs 

把unsigned short

型別從網路序轉換到主機序

ntohl 

把unsigned long

型別從網路序轉換到主機序

在使用little endian

的系統中

這些函式會把位元組序進行轉換

在使用big endian

型別的系統中

這些函式會定義成空巨集

同樣在網路程式開發時

或是跨平台開發時

也應該注意保證只用一種位元組序

不然兩方的解釋不一樣就會產生

bug.注:1

、網路與主機位元組轉換函式

:htons ntohs htonl ntohl (s 

就是short l

是long h

是host n

是network)

2、不同的

cpu上執行不同的作業系統,位元組序也是不同的,參見下表。

處理器作業系統

位元組排序

alpha    

全部little endian

hp-pa    nt    little endian

hp-pa    unix    big endian

intelx86    

全部little endian <-----x86

系統是小端位元組序系統

motorola680x()    

全部big endian

mips    nt    little endian

mips    unix    big endian

powerpc    nt    little endian

powerpc    

非nt    big endian  <-----ppc

系統是大端位元組序系統

rs/6000    unix    big endian

sparc    unix    big endian

ixp1200 arm

核心全部

little endian 

主機位元組序和網路位元組序

1.主機位元組序和網路位元組序1 以下是從ip.h和tcp.h取的,但bsd和linux用的名稱有些不一樣主要是tcp不一樣 struct ip struct tcphdr 我所理解的big序和little序的區別 1 存整數的時候 uint32 t a 1574 1574 0x626 big序 0...

網路位元組序和主機位元組序

1.網路傳資料的時候是乙個位元組乙個位元組的傳.字串裡的每乙個字元只用乙個位元組 前面的就先傳 接收的後再解釋的時候也是按順序來 所以字串沒有網路位元組序的分別.2.網路位元組序預設是大端,也就是說任何機器如果收到乙個 int型的 4個位元組,那麼這個機器就會認為第乙個位元組是最高位,最後乙個位元組...

網路位元組序和主機位元組序

網路程式設計中經常用到的網路位元組序和主機位元組序的轉換,比如ip 字串 暫時只討論ipv4 是以三個點號和四個數字組成,並以點號相分隔的字串。比如說,ip是225.224.223.222,那麼整數是不是就是 0xfffefdfc呢?答案是不一定。雖然此ip位址在記憶體中的儲存順序從左至右依次是,f...