Linux 系统调用 getifaddr c++
在我的 C++ 应用程序中,我编写了以下代码:
struct ifaddrs *ifap;
if (0 != getifaddrs(&ifap)) {
error = errno;
return -1;
}
addresses.clear();
for (struct ifaddrs *ifa = ifap; ifa; ifa = ifa->ifa_next) {
sockaddr *s=ifa->ifa_addr;
PRINT(" LocalIP sockaddr %u.%u.%u.%u \n",s->sa_data[2],s->sa_data[3],s->sa_data[4],s->sa_data[5]);}
当我调试打印时,我发现当我有像 10.0.0.12 这样的静态 IP 时,它会正确打印。但是来自 DHCP 的 ip(例如 192.168.14.12)会打印“-64.-88.14.12”,
我该如何解决这个问题?
10倍
in my c++ application I've wrriten this code:
struct ifaddrs *ifap;
if (0 != getifaddrs(&ifap)) {
error = errno;
return -1;
}
addresses.clear();
for (struct ifaddrs *ifa = ifap; ifa; ifa = ifa->ifa_next) {
sockaddr *s=ifa->ifa_addr;
PRINT(" LocalIP sockaddr %u.%u.%u.%u \n",s->sa_data[2],s->sa_data[3],s->sa_data[4],s->sa_data[5]);}
when I debug the print I see that when I have static ip like 10.0.0.12 it prints it correct. but ip from DHCP like 192.168.14.12 it prints it "-64.-88.14.12"
how can I solve this issue?
10x
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将 %d 更改为 %hhu。
%d 是有符号整数。
%u 是无符号整数。
%hhu 是无符号字符。
此代码说明了原因:
输出:
4294967232, 192, -64
Change %d's to %hhu's.
%d is signed integer.
%u is unsigned integer.
%hhu is unsigned char.
This code shows why:
Output:
4294967232, 192, -64
似乎它正在尝试打印有符号的字节。尝试使用 %u 而不是 %d 内部 IP 地址。
Seems like it's trying to print bytes as signed. Try using %u instead of %d inside IP address.