主機字節序和網絡字節序轉換


為什么要轉換?

主機字節序:整數在內存中保存的順序,不同的處理器對應不容的模式

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類型的系統中 這些函數會定義成空宏

 

參考  http://blog.csdn.net/suwei19870312/article/details/5320831

  http://www.360doc.com/content/12/0222/10/54470_188560773.shtml

 

函數使用需要注意的問題:

IPv4套接口地址數據結構

結構:

    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地址,網絡字節序列

} ;

參考 https://my.oschina.net/SBaof/blog/477585


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM