Linux 系统调用 getifaddr c++

发布于 2024-10-07 15:38:26 字数 520 浏览 6 评论 0原文

在我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅紫色的梦幻 2024-10-14 15:38:26

将 %d 更改为 %hhu。

%d 是有符号整数。
%u 是无符号整数。
%hhu 是无符号字符。

此代码说明了原因:

#include <cstdio>

int main()
{
        char i = 192;
        printf("%u, %hhu, %d", i,i,i);
}

输出: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:

#include <cstdio>

int main()
{
        char i = 192;
        printf("%u, %hhu, %d", i,i,i);
}

Output: 4294967232, 192, -64

幽梦紫曦~ 2024-10-14 15:38:26

似乎它正在尝试打印有符号的字节。尝试使用 %u 而不是 %d 内部 IP 地址。

Seems like it's trying to print bytes as signed. Try using %u instead of %d inside IP address.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文