Linux中inet_aton的问题

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

原题目是说的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 是网络字节序的。如下图

 

 
 
Linux中inet_aton的问题
 
 

“1.2.3.4”中的最高位“1”经过inet_aton转换后出现在最低的8bit中。

 

在mysql中也有inet_aton这个函数,也是将字符串IPv4地址转化成整形。但是经过转换后的4位整形却是主机字节序的。和linux的库函数正好相反。请看下图。

Linux中inet_aton的问题

Linux中inet_aton的问题

 

“1.2.3.4”的“1”在最高8bit中。可见,mysql的inet_aton转化后的结果正好和linux库函数相反。 

同样的 ,linux中,还有inet_ntoa,是将网络字节序的整形转化成字符串(“xxx.xxx.xxx.xxx")的IPv4地址。而mysql的inet_ntoa则是将主机字节序的整形转化成字符串。

你可能感兴趣的:(linux)