【发布时间】:2014-07-13 21:37:08
【问题描述】:
我需要比较两个 IP。一个 IP 以u8 格式存储,我设法将其转换为char *,并将其存储在变量arp_tbuf 中。但是,要比较的第二个 IP 是 u32 格式(来自 ip.h)。但是每次我尝试将u32格式的IP转换为char *如下,
unsigned int pkt_da = (unsigned int)ip_header->daddr;
char pkt_tbuf[16];
char pkt_tbuf_tmp[4];
pkt_tbuf_tmp[0] = pkt_da & 0x000000FF;
pkt_tbuf_tmp[1] = (pkt_da & 0x0000FF00) >> 8;
pkt_tbuf_tmp[2] = (pkt_da & 0x00FF0000) >> 16;
pkt_tbuf_tmp[3] = (pkt_da & 0xFF000000) >> 24;
sprintf(pkt_tbuf, "%d.%d.%d.%d\n", pkt_tbuf_tmp[0], pkt_tbuf_tmp[1], pkt_tbuf_tmp[2], pkt_tbuf_tmp[3]);
我收到 kernel panic 错误。
我知道memcmp 与字符进行比较的功能。
如果各位专家能帮助我将此 IP 转换为 char * 并比较两个 IP,如 memcmp(arp_tbuf, pkt_tbuf),那将是一个很大的帮助。
非常感谢:)
编辑
正如@BobJarvis 建议的那样,我在内核中再次运行了代码。 IT 可以很好地转换 LAN 中的 IP。但是,当我加载网页时,出现了kernel panic 错误。我有更简洁的方法来执行从unsigned int 到char * 的 IP 转换(点 IP 格式)?
【问题讨论】:
-
@BobJarvis 哦错误..我会在问题中更正:)
-
现在,“u8 格式”是什么意思?请出示声明。谢谢。
-
@JimGarrison 哦,我会尽快检查的……完全错过了。非常感谢你:)
-
我刚刚在Ideone 测试了您的代码,它编译并运行良好。 (请注意,我使用文字作为 IP 地址)。你的代码中一定有其他东西导致内核恐慌。尝试获取我在 Ideone 测试过的代码,在您的站点上编译并运行它,然后看看您会得到什么。谢谢。
-
“发生于”并不意味着“发生于”。 16 个字符不足以包含 4 个 3 字符四边形和三个点和换行符和终止空字符。只是说。
标签: c linux comparison ip-address kernel-module