首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inet_ntoa问题

inet_ntoa问题
EN

Stack Overflow用户
提问于 2010-03-25 14:46:10
回答 3查看 5.3K关注 0票数 2

我声明了以下变量

代码语言:javascript
复制
unsigned long   dstAddr;
unsigned long   gateWay;
unsigned long   mask;

这些变量包含网络字节顺序的in地址。因此,当我尝试使用inet_ntoa函数为掩码变量打印点符号时,有时会打印奇怪的值。下面的代码在一个while循环中。循环n次。

代码语言:javascript
复制
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    

但它应该是

代码语言:javascript
复制
  192.168.122.0         0.0.0.0    255.255.255.0

我打印了变量的十六进制值,结果显示..

代码语言:javascript
复制
007aa8c0    00000000      ffffff00  

这是因为inet_ntoa吗??

实际上,我正在尝试通过NETLINKS从内核的254路由表中获取声明变量的值。我想我仍然应该使用inet_ntoa函数将值转换为点符号。??

EN

回答 3

Stack Overflow用户

发布于 2010-03-25 14:49:55

唯一有意义的是,您认为所有地址都按网络字节顺序排列的假设是不正确的。

票数 5
EN

Stack Overflow用户

发布于 2010-03-25 14:50:07

好吧,考虑到它对非掩码值有效(包括第一个也设置了高位的值),我将查看mask实际包含的内容。

当你把它打印出来作为一个普通的无符号的长整型时,它是什么?我打赌mask实际上不是正确的值:

代码语言:javascript
复制
printf ("%08x\t%08x\t%08x\n", dstAddr, gateWay, mask);

(假设您有四字节长)。

例如,这个小程序(在Cygwin下编译):

代码语言:javascript
复制
#include <stdio.h>

int main (void) {
    unsigned long dstAddr, gateWay, mask;
    dstAddr = 0x007aa8c0;
    gateWay = 0x00000000;
    mask    = 0x00ffffff;

    printf("%-15s %-15s %-15s\n",
        inet_ntoa (dstAddr),
        inet_ntoa (gateWay),
        inet_ntoa (mask));

    printf("%-15s ",  inet_ntoa (dstAddr));
    printf("%-15s ",  inet_ntoa (gateWay));
    printf("%-15s\n", inet_ntoa (mask));

    printf ("%08x%8s%08x%8s%08x\n",
        dstAddr, "",
        gateWay, "",
        mask);

    return 0;
}

输出:

代码语言:javascript
复制
192.168.122.0   192.168.122.0   192.168.122.0
192.168.122.0   0.0.0.0         255.255.255.0
007aa8c0        00000000        00ffffff

请注意,我必须分隔对inet_ntoa的调用,因为它似乎使用了静态缓冲区。当我在单个printf中完成所有这些工作时,它会在打印之前覆盖该缓冲区的内容,因此我只处理了最后一个。我不认为这在你的情况下会发生,因为你得到了不同的值。

票数 4
EN

Stack Overflow用户

发布于 2016-12-14 09:06:26

我对你也有同样的问题。如果需要的话,可以使用inet_ntop()和inet_pton()。不要使用inet_ntoa()、inet_aton()等类似的函数,因为它们已被弃用且不支持ipv6。请参阅链接:convert Ip address int to string

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2513550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档