gpt4 book ai didi

c - IP 到 Unsigned Int 不匹配

转载 作者:行者123 更新时间:2023-12-04 05:03:42 38 4
gpt4 key购买 nike

我关注了 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 相同,但我得到以下输出:

not equal: 15774463 != 0



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

最佳答案

您必须检查 inet_aton 的返回值:

inet_aton() returns non-zero if the address is a valid one, and it returns zero if the address is invalid.



您的地址无效。 068由于前导零被解释为八进制,而 8不是有效的八进制数字。如 inet_aton失败,它不会改变 in_addr结构,所以你打印出来的是随机堆栈垃圾。

无论如何, inet_aton不推荐用于新代码。使用 inet_pton 相反。

关于c - IP 到 Unsigned Int 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799460/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com