【发布时间】:2013-09-18 20:22:36
【问题描述】:
如果给您一个网络掩码(例如 255.255.255.0),您如何在 Java 中获得它的长度/位(例如 8)?
【问题讨论】:
-
长度/位是什么意思?
-
我不明白你所说的长度/位数是什么意思。你的意思是你想要二进制形式吗?因为这看起来像一个 32 位网络掩码,令人惊讶的是,它的长度总是 32 位。
如果给您一个网络掩码(例如 255.255.255.0),您如何在 Java 中获得它的长度/位(例如 8)?
【问题讨论】:
如果您想找出整数低端有多少个零位,请尝试Integer.numberOfTrailingZeros。
【讨论】:
使用InetAddress.getByName() 从中获取InetAddress,然后调用getAddress() 获取byte[],然后您应该能够对其进行操作以获得所需的信息。 (我不完全清楚该信息是什么,因为 255.255.255.0 的“长度”绝不是 8...)
【讨论】:
给出的示例是 /24,将每个八位字节转换为整数然后使用查找表,因为每个八位字节的唯一有效值可以在 0-8 范围内(即0 -> 0 ; 128 -> 1; 192 -> 3; ...)。最后,将每个八位字节的值相加,以生成 CIDR 表示法的前缀长度。
【讨论】:
寻找类似的东西?
int netmask = 255;
boolean bit7 = (netmask>>>7)&&0b1;
【讨论】:
从这里的其他一些答案可以看出,这个问题有些模糊,因为它取决于您从哪里获取信息,并且您示例中的网络掩码实际上是 24 位而不是 8 位。
如果您需要有关本地接口的信息,则可以使用InterfaceAddress 的getNetworkPrefixLength() 方法。
如果信息是作为字符串提供给您的,那么您应该分解四个八位字节并将它们相乘成一个 Long,您可以使用 Long 中的 numberOfTrailingZeros() 来计算网络掩码的大小。
【讨论】: