一個ip地址用字符串保存,長度爲(7-15)也就是(14-30bytes),而用int保存只需要4bytes,所以下面的代碼:
/**
* ip字符串轉整數
* ip是.分割的整數字符串,按照r進制轉十進制的規律,按權相加求和,這裏的權是256.
* @param ip
* @return
*/
public int ip2Int(String ip){
if(null == ip || "".equals(ip.trim()) || !checkIP(ip)) return 0;
String[] ipStrs = ip.split("\\.");//分割ip
int result = 0;
for(int i = 0;i < 4;i ++){
Integer ipSubInteger = Integer.parseInt(ipStrs[i]);
if(ipSubInteger > 255) {//正則驗證不能爲負數
result = 0;
break;
}
result += (ipSubInteger << (24 - i * 8));
}
return result;
}
/*正則驗證ip*/
private boolean checkIP(String ip){
return ip.matches("\\d{1,3}(\\.\\d{1,3}){3}");
}
/**
* 整數轉ip
* @param ip
* @return
*/
public String int2Ip(int ip){
StringBuilder builder = new StringBuilder(String.valueOf(ip >>> 24));
builder.append(".");
builder.append(String.valueOf((ip & 0X00FFFFFF) >>> 16));
builder.append(".");
builder.append(String.valueOf((ip & 0X0000FFFF) >>> 8));
builder.append(".");
builder.append(String.valueOf(ip & 0X000000FF));
return builder.toString();
}