Linux中inet_aton的問題(IP轉整數)


在網上看到一篇如下文章:

原題目是說的mysql的陷阱,但是仔細分析起來,應該是Linux,c在轉換的時間的問題,不符合ip串轉整形的通用算法,所以用c轉的時候還需注意

 

linux C中有個函數inet_aton可以將IPv4的字符串地址(xxx.xxx.xxx.xxx)轉換成網絡地址結構體 struct in_addr。 

struct in_addr {

    unsigned long int s_addr;

}

當通過 inet_aton轉化后,返回結果中的 in_addr.s_addr 是網絡字節序的。如下圖

 

 
 
 
 

“1.2.3.4”中的最高位“1”經過inet_aton轉換后出現在最低的8bit中。

 

在mysql中也有inet_aton這個函數,也是將字符串IPv4地址轉化成整形。但是經過轉換后的4位整形卻是主機字節序的。和linux的庫函數正好相反。請看下圖。

 

“1.2.3.4”的“1”在最高8bit中。可見,mysql的inet_aton轉化后的結果正好和linux庫函數相反。 

同樣的 ,linux中,還有inet_ntoa,是將網絡字節序的整形轉化成字符串(“xxx.xxx.xxx.xxx")的IPv4地址。而mysql的inet_ntoa則是將主機字節序的整形轉化成字符串。


免責聲明!

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



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