0

如果给您一个网络掩码(例如 255.255.255.0),您如何在 Java 中获得该网络掩码(例如 8)的长度/位?

4

5 回答 5

1

如果您想找出整数低端有多少个零位,请尝试Integer.numberOfTrailingZeros

于 2013-09-18T20:37:20.710 回答
0

从这里的其他一些答案可以看出,这个问题有点模糊,因为它取决于您从哪里获取信息,并且您示例中的网络掩码实际上是 24 位而不是 8 位。

如果您需要有关本地接口的信息,则可以getNetworkPrefixLength()使用InterfaceAddress.

如果信息是作为字符串提供给您的,那么您应该分解四个八位字节并将它们相乘成一个Long,您可以使用它numberOfTrailingZeros()Long计算您的网络掩码的大小。

于 2013-09-18T21:36:32.943 回答
0

用于InetAddress.getByName()从中获取 InetAddress,然后调用getAddress()以获取byte[]您应该能够操作以获取所需信息的信息。(我并不完全清楚该信息是什么,因为 255.255.255.0 的“长度”绝不是 8...)

于 2013-09-18T20:26:37.203 回答
0

给出的示例是 /24,将每个八位字节转换为整数,然后使用查找表,因为每个八位字节的唯一有效值可以在 0-8 范围内(即0-> 0; 128-> 1; 192-> 3; .. .)。最后,将每个八位字节的值相加,以生成 CIDR 表示法的前缀长度。

于 2013-09-18T20:28:39.700 回答
0

寻找类似的东西?

int netmask = 255;
boolean bit7 = (netmask>>>7)&&0b1;
于 2013-09-18T21:03:28.197 回答