IP到Unsigned Int不匹配

时间:2013-04-03 22:36:22

标签: c ip

我按照this的问题和答案将IP地址(数字和点表示法)转换为相应的无符号整数等值。换句话说,我使用了inet_aton函数

我在c中制作了一个非常快速的程序来测试该功能。以下是代码:

int main(int argc, char** argv) {
    char* ip1 = "125.113.200.068";
    char* ip2 = "125.113.200.068";
    struct in_addr ip1s;
    inet_aton(ip1, &ip1s);
    struct in_addr ip2s;
    inet_aton(ip2, &ip2s);

    if (ip1s.s_addr == ip2s.s_addr) {
        printf("equal: %u = %u", ip1s.s_addr, ip2s.s_addr);
    }else{
        printf("not equal: %u != %u", ip1s.s_addr, ip2s.s_addr);
    }

    return (EXIT_SUCCESS);
}

尽管两个字符串给出相同的ip,但我得到以下输出:

  

不相等:15774463!= 0

此外,如果我删除0使得ips设置为125.113.200.68,则该函数返回两个相等的无符号整数。前面的0会使IP无效吗?但是如果是这样的话,为什么我在前一个例子中为其中一个ips获得了非零值?

1 个答案:

答案 0 :(得分:3)

您必须检查inet_aton的返回值:

  如果地址是有效地址,则

inet_aton()返回非零值,如果地址无效,则返回零。

您的地址无效。由于前导零,068被解释为八进制,8不是有效的八进制数字。如果inet_aton失败,则不会更改in_addr结构,因此您打印的内容是随机堆栈垃圾。

在任何情况下,建议不要将inet_aton用于新代码。请改用inet_pton