子网掩码与prefixLength长度的互相转换
生活随笔
收集整理的這篇文章主要介紹了
子网掩码与prefixLength长度的互相转换
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、prefixLength轉(zhuǎn)換成子網(wǎng)掩碼,類似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,子網(wǎng)掩碼轉(zhuǎn)換成prefixLength長(zhǎng)度
/***子網(wǎng)掩碼轉(zhuǎn)成長(zhǎng)度* @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;}總結(jié)
以上是生活随笔為你收集整理的子网掩码与prefixLength长度的互相转换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Vue错误03:Property or
- 下一篇: MySQL的函数——聚合函数、数学函数、