Java-如何将网络掩码转换为位/长度

Java-如何将网络掩码转换为位/长度,java,netmask,Java,Netmask,如果给您一个网络掩码(例如255.255.255.0),您如何在Java中获得该掩码(例如8)的长度/位?使用InetAddress.getByName()从中获取一个InetAddress,然后调用getAddress()获取一个字节[],然后您应该能够对其进行操作以获取所需的信息。(我不完全清楚该信息是什么,因为255.255.255.0的“长度”在任何意义上都不是8…)给出的示例是a/24,将每个八位字节转换为整数,然后使用查找表,因为每个八位字节的唯一有效值可以在0-8范围内(即,0->

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

使用
InetAddress.getByName()
从中获取一个InetAddress,然后调用
getAddress()
获取一个
字节[]
,然后您应该能够对其进行操作以获取所需的信息。(我不完全清楚该信息是什么,因为255.255.255.0的“长度”在任何意义上都不是8…)

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

如果您试图找出整数的低端有多少个零位,请尝试。

寻找类似的值

int netmask = 255;
boolean bit7 = (netmask>>>7)&&0b1;

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

如果您正在查找有关本地接口的信息,则可以使用
InterfaceAddress
getNetworkPrefixLength()
方法


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

长度/位是什么意思?我不明白长度/位是什么意思。你的意思是想要二进制形式的吗?因为它看起来像32位网络掩码,令人惊讶的是,总是32位长度。