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

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

(顺便说一句,这将在C中完成,我已经拥有所有代码以获取每个的整数值)

谢谢。

最佳答案

您链接的问题的答案确实告诉您您需要了解的所有信息:

给定三个数字IP1IP2mask,您只需

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

09-04 13:39