位元組順序 網路位元組順序

2021-06-17 23:15:17 字數 2959 閱讀 6198

位元組順序

位元組順序是指佔記憶體多於乙個位元組型別的資料在記憶體中的存放順序,通常有小端、大端

兩種位元組順序。

小端位元組序

指低位元組資料存放在記憶體低位址處,高位元組資料存放在記憶體高位址處; 大端

位元組序是高位元組資料存放在低位址處,低位元組資料存放在高位址處。

記憶體位址增長是從低位址到高位址,

低位址放低位元組資料是小端位元組序,公升序,

低位址放高位元組資料是大端位元組序,降序。

如: 乙個多位元組值 0xfecdba98,記憶體從位址100開始存放

降序(高位元組到低位元組): fe | cd | ba | 98 ---->;對應位址100 | 101 | 102 | 103

公升序 (低位元組到高位元組): 98 | ba | cd | fe ---->;

對應位址100 | 101 | 102 | 103

記憶體位址生長方向為: 從左到右 由低到高(這是不變的)

資料為: 0x98badcfe

降序(big-endian)大端位元組序儲存時 由左到右

公升序(little-endian)小端位元組序儲存時 由右向左

網路位元組順序

不同的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

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

不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 le little endian 最符合人的思維的位元組序 位址低位儲存值的低...

網路位元組順序

本文摘自 不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種1 little endian2 big endian le little endian 最符合人的思維的位元組序 位址低位儲存值的低位 位址高位儲存值的高位 怎麼講是最符合人的思維的...

網路位元組順序

不同的 cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種1 little endian2 big endian le little endian 最符合人的思維的位元組序 位址低位儲存值的低位 位址高位儲存值的高位 怎麼講是最符合人的思維的位元組序...