【问题标题】:Java - how to convert netmask to bits/lengthJava - 如何将网络掩码转换为位/长度
【发布时间】:2013-09-18 20:22:36
【问题描述】:

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

【问题讨论】:

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

标签: java netmask


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        寻找类似的东西?

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

        【讨论】:

          【解决方案5】:

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

          如果您需要有关本地接口的信息,则可以使用InterfaceAddressgetNetworkPrefixLength() 方法。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-06-02
            • 2016-04-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-06
            • 1970-01-01
            相关资源
            最近更新 更多