【发布时间】:2014-04-06 16:09:29
【问题描述】:
我正在尝试比较 ip 地址并查看它是否适合某个范围(即网络 ID 和广播 ID)
starting =(rt_walker->dest).s_addr;
subnet = (rt_walker->mask).s_addr;
broadcast = starting | (~subnet);
if(ip_address>=starting && ip_address<=broadcast){
found_route =1;
}
此代码运行良好,但如果我有 rt_walker->dest 的“10.0.0.0”,那么 这一行 (rt_walker->dest).s_addr 给了我 10 而不是 32 位二进制值。因此,如果将“10.0.0.0”(起始地址)与“9.90.100.78”(正在比较的 IP 地址)进行比较,它总是在范围(10 - 10.255.255.255)内,这不应该是真的。
【问题讨论】:
-
在进行int比较之前切换字节顺序
-
我该怎么做?有帮助代码吗?
-
在一个有四个字符 a b c d 的数组中,你认为如何将顺序切换为 d c b a?这里没有别的东西。 linux.die.net/man/3/htonl 会这样做,否则手动。
标签: c networking casting ip