網路位元組序和IP位址詳解

2021-08-29 02:34:43 字數 2141 閱讀 2487

二、位元組序轉換函式

三、ip位址詳解

四、ip位址轉換

位元組序是指多位元組資料的儲存順序,在設計計算機系統的時候,有兩種處理記憶體中資料的方法:大端格式、小端格式。

大端格式(big-endian):將高位位元組資料儲存在低位址。

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

【下面例子為確定主機的位元組序】:

#include

intmain

(int argc, charchar *argv)

elseif(

0x78

==*p)

return0;

}

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

使用移位運算:

uint32_t

reversebytes_uint32t

(uint32_t value)

上述**中,將低8位(0~8位)左移24位,變成了高8位(24~32位),8~16位左移8位變成了

(16~24位)。將原高8位和高16位右移,變成了新的低8位和低16位。

#include

// 將 32位主機位元組序資料轉換成網路位元組序資料

//(h:host, n:net,l:long)

uint32_t htonl

(uint32_t hostint32)

;// 將 16 位主機位元組序資料轉換成網路位元組序資料

uint16_t htons

(uint16_t hostint16)

;// 將 32 位網路位元組序資料轉換成主機位元組序資料

uint32_t ntohl

(uint32_t netint32)

;// 將 16 位網路位元組序資料轉換成主機位元組序資料

uint16_t ntohs

(uint16_t netint16)

;

ip位址分為網路ip和主機ip:

點分十進位制->整數:點分十進位制->十六進製制->十進位制(整數)。

整數->點分十進位制:十進位制(整數)->十六進製制->每個位元組轉換為十進位制(整數)。

#include

intinet_pton

(int family,

const

char

*strptr,

void

*addrptr)

;

返回值:成功返回 1 ,失敗返回其它。

#include

#include

intmain()

#include

const

char

*inet_ntop

(int family,

const

void

*addrptr,

char

*strptr, size_t len )

;

**:

ip位址 網路位元組序 主機位元組序的關係

不同的cpu有不同的位元組序型別 這些位元組序是指整數在記憶體中儲存的順序 這個叫做主機序 最常見的有兩種 1 little endian 將低序位元組儲存在起始位址 2 big endian 將高序位元組儲存在起始位址 網路位元組序用的是big endian方式,即如果乙個ip位址為 127.0....

網路程式設計 網路位元組序和位址位元組序轉化

網路位元組序是大端序,而記憶體位元組序是小端序 就像彙編學的內容一致 大端序 高位位元組存放到地位位址 小端序 高位位元組存放在高位位址 因此在位址傳輸時需要將位址進行轉化 short unsigned short htons unsigned short h to n,主機轉化成網路資料 s sh...

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

以下內容參考了 計算機硬體有兩種儲存資料的方式 大端位元組序 big endian 和小端位元組序 little endian 舉例來說,數值0x2211使用兩個位元組儲存 高位位元組是0x22,低位位元組是0x11。順序為大端,逆序的為小端 同理,0x1234567的大端位元組序和小端位元組序的寫...