如何使用IP的整数值(在C中)确定两个IP是否在同一子网上?

时间:2014-02-10 04:30:00

标签: c binary ip decimal subnet

“在软件中,通常将IPv4地址存储在一个32位变量中 - 所以126.127.0.1是01111110011111110000000000000001二进制(也编码2122252289十进制,除了没有人关心32位IP地址的十进制值is),只有在需要向人类用户显示时才转换为点分十进制。“ - 来自此处的类似问题:Determining if two IP adresses are on same subnet - is it leading or trailing 0s get dropped from IP address?

引言中的内容解释了我在说什么。我被告知要从两个点分十进制IP地址'和子网掩码的整数值中获取整数值。使用这三个整数值,我将使用掩码确定两个IP是否在同一子网中。我很困惑如何处理这三个整数值来得到我的答案。通常情况下,我会停在每个二进制值,然后将它们组合起来得到我的答案,但似乎我必须用整数值做一些事情来得到答案,而不是简单地和二进制值。可能是什么?

(顺便说一下,这是在C中完成的,我已经让所有的代码都可以获得每个代码的整数值)

感谢。

1 个答案:

答案 0 :(得分:1)

您链接的问题的答案确实告诉您需要知道的一切:

根据三个数字,IP1IP2mask,您只需

if(IP1 & mask == IP2 & mask) {
  printf("they are in the same subnet\n");
}