Java-如何将网络掩码转换为位/长度
如果给您一个网络掩码(例如255.255.255.0),您如何在Java中获得该掩码(例如8)的长度/位?使用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->
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位长度。