一般的子网掩码展示为点分十进制形式,如: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);
    }测试





![P8772 [蓝桥杯 2022 省 A] 求和](https://i-blog.csdnimg.cn/direct/c7f456bbe4e041c4b71fc1eeb2d26f71.png)















