java 掩碼 iP與位數的轉化

,一,掩碼形如:“255.255.255.0”轉化爲位 數24,思路如下:

  1. 判斷傳入的掩碼字符串是否是ip,最簡單的方法使用正則,直接進行匹配,代碼如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public static boolean isMask(String mask){  
Pattern pattern = Pattern.compile("(^(\\d{1,3}\\.){3}\\d{1,3}$)"); 
return pattern.matcher(mask).matches();
}

2.  判斷IP中1個數,我使用的思路,將掩碼轉化爲整形,對整形進行判斷1的個數。
2.1  將IP轉化爲整形

    public static int ipToInt(String ipAddr) {

if(!isMask(ipAddr))
return 0;
        String[] ipArr = ipAddr.split("\\.");
       
        return  ((Integer.parseInt(ipArr[0]) & 0xFF) <<24) + ((Integer.parseInt(ipArr[1]) & 0xFF) << 16) 
+  ((Integer.parseInt(ipArr[2]) & 0xFF))  << 8 + ((Integer.parseInt(ipArr[3]) & 0xFF));

    }



2.2  對整數進行數1操作:

public staticint findNumberOf1(int n)
{
    int count
Of1=0;
    int
tag=1;
while(tag != 0)
    {
        if((tag&n) !=0)
            countOf1++;
        tag=tag<<1;
    }
    return countOf1;
}


二,掩碼位數轉化爲IP形式,思路如下:

public static String intToMask(int bitMask)
{
if(bitMask > 32)
return null;

        int tmpMask[] = {0,0,0,0};
        int times = bitMask / 8;
        int i = 0;
for(; i < times ; i++)
{
tmpMask[i] = 255;
}

for(int j = 1; j <= 8; j++)
{
if(j <= bitMask - times*8)
tmpMask[i] = 2*tmpMask[i] + 1;
else
tmpMask[i] = 2*tmpMask[i];
}
 
return Integer.toString(tmpMask[0]) + "." + Integer.toString(tmpMask[1]) +  "." +  Integer.toString(tmpMask[2])  + "." + Integer.toString(tmpMask[3]);
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章