IP转换整数:
1.把IP地址转化为字节数组。
2.通过左移位(<
整数转换IP:
1.将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。
2.将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。
3.将整数值进行右移位操作(>>>),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。
4.将整数值进行与操作符(&)0xFF,得到的数字即为第四段IP。
package com.what21.ip;
public class IPV4Util {
/**
* @param ipAddress
* @return
*/
public static long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
// left shifting 24,16,8,0 and bitwise OR
// 1. 192 << 24
// 1. 168 << 16
// 1. 1 << 8
// 1. 2 << 0
result |= ip << (i * 8);
}
return result;
}
/**
* @param ip
* @return
*/
public static String longToIp(long ip) {
StringBuilder result = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
result.insert(0,Long.toString(ip & 0xff));
if (i < 3) {
result.insert(0,'.');
}
ip = ip >> 8;
}
return result.toString();
}
/**
* @param ip
* @return
*/
public static String longToIp2(long ip) {
return ((ip >> 24) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "."
+ ((ip >> 8) & 0xFF) + "." + (ip & 0xFF);
}
/**
* @param args
*/
public static void main(String[] args) {
long result = ipToLong("192.168.18.1");
System.out.println("IP转换为long的结果: " + result);
System.out.println("long转换为IP的结果: " + longToIp(result));
System.out.println("long转换为IP的结果: " + longToIp2(result));
}
}