為什麼要轉換?
主機位元組序:整數在記憶體中儲存的順序,不同的處理器對應不容的模式
little endian 將低序位元組儲存在起始位址
big endian 將高序位元組儲存在起始位址
網路位元組序:整數在網路中的傳送順序
網路位元組順序是tcp/ip中規定好的一種資料表示格式,它與具體的cpu型別、作業系統等無關,從而可以保證資料在不同主機之間傳輸時能夠被正確解釋。
網路位元組順序採用big endian排序方式
htons 本地的無符號short型主機位元組序轉換為網路位元組序
htonl 本地的無符號long型主機位元組序轉化為網路位元組序
ntohs 網路位元組序轉換為本地的無符號short型主機位元組序
ntohl 網路位元組序轉換為 本地的無符號long型主機位元組序
inet_addr: 將乙個點間隔位址轉換成 struct in_addr
inet_ntoa: 將網路位元組序格式ip轉換到字串
inet_aton: 將字串轉換到網路位元組序格式ip
inet_pton: 將點十分進製轉換為網路位元組序
atoi: 將字串轉換為整型數
在使用little endian的系統中 這些函式會把位元組序進行轉換
在使用big endian型別的系統中 這些函式會定義成空巨集
參考
函式使用需要注意的問題:
結構:
struct sockaddr_in {
short int sin_family; //ipv4協議為af_inet
unsigned short int sin_port; //16位埠號,網路位元組序列
struct in_addr sin_addr;
unsigned char sin_zero[8]; //備用域,為了和struct sockaddr位元組數保持相同;
struct in_addr{
in_addr_t s_addr;//32位ip位址,網路位元組序列
參考
網路位元組序和主機位元組序
不同的 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...
網路位元組序和主機位元組序
1.網路傳資料的時候是乙個位元組乙個位元組的傳.字串裡的每乙個字元只用乙個位元組 前面的就先傳 接收的後再解釋的時候也是按順序來 所以字串沒有網路位元組序的分別.2.網路位元組序預設是大端,也就是說任何機器如果收到乙個 int型的 4個位元組,那麼這個機器就會認為第乙個位元組是最高位,最後乙個位元組...