3

我需要在 Java 中将 IP 子网掩码转换为 24 到 255.255.255.0 或 23 到 255.255.254.0。有没有我可以使用的 API?

谢谢。

4

2 回答 2

5

没有任何库:

int cidrMask = 23;
long bits = 0;
bits = 0xffffffff ^ (1 << 32 - cidrMask) - 1;
String mask = String.format("%d.%d.%d.%d", (bits & 0x0000000000ff000000L) >> 24, (bits & 0x0000000000ff0000) >> 16, (bits & 0x0000000000ff00) >> 8, bits & 0xff);

>>255.255.254.0

由于缺少 Java 中的无符号类型,必须使用 long

于 2013-06-12T15:18:05.537 回答
0

http://commons.apache.org/proper/commons-net/apidocs/index.html?org/apache/commons/net/util/SubnetUtils.html

我关注了 NeplatnyUdaj 的评论,看起来您可以构造一个 SubnetUtils 对象来获取掩码:

    int mask = 3;
    String cidr = "255.255.255.255/" + mask;
    SubnetUtils subnet = new SubnetUtils(cidr);

    String stringMask = subnet.getInfo().getNetmask();

    System.out.println("The subnet mask is: " + stringMask);

这就是我使用的,它对我有用。事实上,使用 getNetmask() 方法可以使您用来构造 cidr 字符串的 IP 字符串任意。

于 2013-06-12T15:05:15.657 回答