在網上看到一篇如下文章:
原題目是說的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則是將主機字節序的整形轉化成字符串。