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

2022-09-02 19:33:07 字數 1057 閱讀 1145

為什麼要轉換?

主機位元組序:整數在記憶體中儲存的順序,不同的處理器對應不容的模式

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個位元組,那麼這個機器就會認為第乙個位元組是最高位,最後乙個位元組...