一般的子网掩码展示为点分十进制形式,如:255.255.255.0,但有时因为业务需要,我们需要转换成对应的数字,以及数字转成点分十进制,所以整理了java的方法可以进行两者的互相转换
1、点分十进制转数字
public static int convertSubnetMaskToNumber(String subnetMask) {
String[] octets = subnetMask.split("\\.");
int numberOfOnes = 0;
for (String octet : octets) {
int octetValue = Integer.parseInt(octet);
String binaryString = Integer.toBinaryString(octetValue);
numberOfOnes += binaryString.length() - binaryString.replace("1", "").length();
}
return numberOfOnes;
}
测试
2、数字转点分十进制
public static String networkBitsToSubnet(int networkBits) {
int mask = 0xffffffff << (32 - networkBits);
return String.format("%d.%d.%d.%d", (mask >> 24) & 0xff, (mask >> 16) & 0xff, (mask >> 8) & 0xff, mask & 0xff);
}
测试