【发布时间】:2011-01-31 14:18:33
【问题描述】:
我声明以下变量
unsigned long dstAddr;
unsigned long gateWay;
unsigned long mask;
这些变量包含按网络字节顺序排列的 IP 地址。因此,当我尝试使用inet_ntoa 函数为掩码变量打印点符号时,有时它会打印奇怪的值。下面的代码在一个while循环中..循环n次。
printf("%s\t%s\t%s\t",inet_ntoa(dstAddr),inet_ntoa(gateWay),inet_ntoa(mask));
192.168.122.0 0.0.0.0 0.255.255.255
但应该是
192.168.122.0 0.0.0.0 255.255.255.0
我打印了变量的十六进制值,它显示..
007aa8c0 00000000 ffffff00
这是因为 inet_ntoa 吗??
实际上,我正在尝试通过 NETLINKS 从内核中的 254 路由表中获取声明变量的值。我想我仍然应该使用 inet_ntoa 函数将值转换为点符号.. ??
【问题讨论】:
-
只是一个警告,inet_ntoa 已被弃用 - 您应该改用 inet_ntop() 或 inet_pton()。
-
inet_ntop() 和 inet_pton() 也被弃用,因为它们不支持 IPv6 范围标识符。如果你想要 IPv6 支持,你应该使用 getaddrinfo() 和 getnameinfo()。
-
@codingfreak,无论设置你的掩码都是错误的。根据我的回答,该值应为 00ffffff。