zoukankan      html  css  js  c++  java
  • 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则是将主机字节序的整形转化成字符串。

  • 相关阅读:
    表管理和索引,外键作用
    小场景 shell 应用
    高并发Linux系统及kernel参数优化
    H3C F100-M-G 配置2条数字专线
    yun update更新后 vm-workstation 找不到kernel
    布局页面
    第八节课
    第七堂课
    第六堂课 框架和样式表的基础
    第五节课 表单元素
  • 原文地址:https://www.cnblogs.com/xd502djj/p/3275727.html
Copyright © 2011-2022 走看看