子网掩码与prefixLength长度的互相转换

1、prefixLength转换成子网掩码,类似255.255.255.0

public static long calcMaskByPrefixLength(int length) {
        int mask = -1 << (32 - length);
        int partsNum = 4;
        int bitsOfPart = 8;
        int maskParts[] = new int[partsNum];
        int selector = 0x000000ff;
        for (int i = 0; i < maskParts.length; i++) {
            int pos = maskParts.length - 1 - i;
            maskParts[pos] = (mask >> (i * bitsOfPart)) & selector;
        }
        String result = "";
        result = result + maskParts[0];
        for (int i = 1; i < maskParts.length; i++) {
            result = result + "." + maskParts[i];
        }
        System.out.println(result);
        return (maskParts[0] << 24) + (maskParts[1] << 16) + (maskParts[2] << 8) + (maskParts[3]);
    }

2,子网掩码转换成prefixLength长度

 /**
     *子网掩码转成长度
     * @param netMask
     * @return
     */
    public static int calcNetMaskInt(String netMask) {
        Log.d("cnetMask", "netMask =" + netMask);
        StringBuffer sbf;
        String str;
        int prefixLength = 0, count = 0;
        String[] split = netMask.split("\\.");
        for (int n = 0; n < split.length; n++) {
            sbf = toBin(Integer.parseInt(split[n]));
            str = sbf.reverse().toString();
            //Log.e("net", split[n] + "===" + str);
            count = 0;
            for (int i = 0; i < str.length(); i++) {
                i = str.indexOf('1', i);
                if (i == -1) {
                    break;
                }
                count++;
            }
            prefixLength += count;
        }
        Log.e("cnetMask", "netMask prefixLength=" + prefixLength);
        return prefixLength;
    }


   private static StringBuffer toBin(int x) {
        StringBuffer result = new StringBuffer();
        result.append(x % 2);
        x /= 2;
        while (x > 0) {
            result.append(x % 2);
            x /= 2;
        }
        return result;
    }
上一篇:String和List相互转换


下一篇:如何看mysql锁信息