二、位元組序轉換函式
三、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的大端位元組序和小端位元組序的寫...