mysql inet_aton的“陷阱”

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库函数相反。在开发中如果遇上了用mysql导数据的时候需要小心这个地方。


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

你可能感兴趣的:(UNIX/Linux,C/C++)