转化思路
ipv4的ip段在【0.0.0.0-255.255.255.255】之间,而int是4个byte,每个byte有8个字节,取值范围是-127-128,故ip段可看做四个数字,通过左移(<<)加权后相加得到整段ip的int值
具体代码实现如下:
/**
* 通过左移位操作(<<)给每一段的数字加权
* 第一段的权为2的24次方
* 第二段的权为2的16次方
* 第三段的权为2的8次方
* 最后一段为本身
*
* @param ip
* @return int
*/
public static int ipToInt(String ip) {
String[] ips = ip.split("\\.");
return (Integer.parseInt(ips[0]) << 24) + (Integer.parseInt(ips[1]) << 16)
+ (Integer.parseInt(ips[2]) << 8) + Integer.parseInt(ips[3]);
}
/**
* 将整数值进行右移位操作(>>)
* 右移24位,右移时高位补0,得到的数字即为第一段IP
* 右移16位,右移时高位补0,得到的数字即为第二段IP
* 右移8位,右移时高位补0,得到的数字即为第三段IP
* 最后一段为本身
*
* @param i
* @return String
*/
public static String intToIp(int i) {
return ((i >> 24) & 0xFF) + "." + ((i >> 16) & 0xFF) + "."
+ ((i >> 8) & 0xFF) + "." + (i & 0xFF);
}
public static void main(String args[]) {
int num = ipToInt("192.168.100.203");
System.out.println(intToIp(num));
}