在java中将子网掩码中的位数转换为点十进制形式

在java中将子网掩码中的位数转换为点十进制形式,java,ip,Java,Ip,我需要在Java中将IP子网掩码转换为例如24到255.255.255.0或23到255.255.254.0。有什么API我可以使用吗 谢谢。 我遵循了NeplatnyUdaj的评论,看起来您可以构造一个SubnetUtils对象来获取掩码: int mask = 3; String cidr = "255.255.255.255/" + mask; SubnetUtils subnet = new SubnetUtils(cidr); String strin

我需要在Java中将IP子网掩码转换为例如24到255.255.255.0或23到255.255.254.0。有什么API我可以使用吗

谢谢。

我遵循了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字符串具有任意性。

不带任何库:

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
int-cidrMask=23;
长位=0;
位=0xFFFFFF^(1>24,(位&0x000000000FF0000)>>16,(位&0x000000000FF00)>>8,位&0xff);
>>255.255.254.0

由于Java中缺少无符号类型,我不得不使用long,我喜欢它的紧凑性。把所有的代码都放在一个方法中
公共字符串cidrToMask(int-cidr){…}
加上一个土豆,一些胡萝卜,还有宝贝,你有炖菜了!gma感谢您提供简洁的代码。但我有一个问题,当cidrMask为0时,以点十进制形式表示的子网掩码是什么。是0.0.0.0还是255.255.255.255?你可以试试:):
255.255.255.255
gma:在网上搜索时,我发现cidrMask 0对应于0.0.0.0,而不是255.255.255.255。我也查了维基百科(查看参考资料)