【问题标题】:Working of INET_NTOAINET_NTOA 的工作
【发布时间】:2014-05-30 19:29:27
【问题描述】:

有人知道 MySql INET_NTOA() 是如何将整数值转换回 IP 地址格式的吗?我想知道如何在内部执行计算以将 IP 转换为其原始互联网标准点分十进制格式。

【问题讨论】:

    标签: mysql database ip-address


    【解决方案1】:

    它使用网络byte order(大端)将一个整数分解为四个字节:

    167773449 => A0 00 05 09
    

    然后它将这些字节连接在一起,中间有一个点:

    10.0.5.9
    

    【讨论】:

    • 您如何将 167773449 转换为 A0 00 05 09?你能解释一下所涉及的手动计算吗?
    • @VishnuY 我抓起我的卡西欧并转换它:) 典型的十进制 -> 十六进制转换。
    • 但是我得到的对应值是A000509。
    • @VishnuY 不是一回事吗?唯一的区别是分组:)
    【解决方案2】:

    用二进制写 16777343:
    1 0000 0000 0000 0000 0111 1111
    从 LSB 开始对位进行分组(以 8 为一组形成一个字节):
    [1] [0000 0000] [0000 0000] [0111 1111]
    现在以小端形式写成十进制(最低有效字节在前):
    127.0.0.1

    这可以通过使用来验证:

    struct sockaddr_in 羚羊;
    inet_aton("127.0.0.1", &antelope.sin_addr); // 将 IP 存储在 antelope
    printf("%lld\n",antelope.sin_addr.s_addr); //打印 16777343
    printf("%s\n",inet_ntoa(antelope.sin_addr)); //打印 127.0.0.1

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 1970-01-01
      • 2011-02-14
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多