位元組序和網路位元組序

2021-06-19 00:32:56 字數 2056 閱讀 5040

1位元組序

由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同. 位元組序分為小尾位元組序(little endian)和大尾位元組序(big endian), intel處理器大多數使用小尾位元組序, motorola處理器大多數使用大尾(big endian)位元組序;

小尾就是低位位元組排放在記憶體的低端,高位位元組排放在記憶體的高階。例如乙個4位元組的值為0x1234567的整數與高低位元組對應關係: 01

23 45

67byte3

byte2

byte1

byte0

高位位元組--

à---------

à--------------

à低位位元組

將在記憶體中按照如下順序排放:

記憶體位址序號

位元組在記憶體中的位址 16

進製值

0x03

byte3 01

0x02

byte2 23

0x01

byte1 45

0x00

byte0 67

大尾就是高位位元組排放在記憶體的低端,低位位元組排放在記憶體的高階。例如乙個4位元組的值為0x1234567的整數與高低位元組對應關係: 01

23 45

67byte3

byte2

byte1

byte0

高位位元組--

à---------

à--------------

à低位位元組

將在記憶體中按照如下順序排放:

記憶體位址序號

位元組在記憶體中的位址 16

進製值

0x03

byte0 67

0x02

byte1 45

0x01

byte2 23

0x00

byte3 01

2網路位元組序

tcp/ip

各層協議將位元組序定義為大尾,因此tcp/ip協議中使用的位元組序通常稱之為網路位元組序。

3字串在記憶體中的儲存(intel系列)

字串和整數是相反的,是安字串的索引從低到高儲存到記憶體中的;

char s[4] = 

「abc」;   a

b c/0

s[0]

s[1]

s[2]

s[3]

將在記憶體中按照如下順序排放:

記憶體位址序號 16

進製值

指標p的位置

0xbffeadf7 /0

p+30xbffeadf6 c

p+20xbffeadf5 b

p+10xbffeadf4 a

p int main(void)

輸出結果:

[netcool@hfinmsp2 demo]$ ./demo001

bffeadf4,       bffeadf5,       bffeadf6,       bffeadf7

bffeadf4,       bffeadf5,       bffeadf6,       bffeadf7

a,      b,      c,

4整數陣列在記憶體中的儲存(intel系列)

同字串一樣,但是陣列裡的每乙個整數的儲存是按照小尾位元組序;

5linux系統中的處理方法

網路位元組序作為乙個標準位元組序,如果系統並沒有提供相關的轉換函式,我們可以通過以下4個巨集實現本地位元組序和網路位元組序的相互轉換:

htons():

將16位無符號整數從本地位元組序轉換成網路位元組序

htonl():

將32位無符號整數從本地位元組序轉換成網路位元組序

ntohs():

將16位無符號整數從網路位元組序轉換成本地位元組序

ntohl():

將32位無符號整數從網路位元組序轉換成本地位元組序

位元組序和網路位元組序

1 位元組序 由於不同的計算機系統採用不同的位元組序儲存資料,同樣乙個4位元組的32位整數,在記憶體中儲存的方式就不同.位元組序分為小尾位元組序 little endian 和大尾位元組序 big endian intel處理器大多數使用小尾位元組序,motorola處理器大多數使用大尾 big e...

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

不同的 cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種1 little endian2 big endian le 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...