一、基本知识点
IP ——> 整数:
?6?1 把IP地址转化为字节数组
?6?1 通过左移位(<
整数 ——> IP:
?6?1 将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。
?6?1 将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。
?6?1 将整数值进行右移位操作(>>>),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。
?6?1 将整数值进行与操作符(&)0xFF,得到的数字即为第四段IP。
二、java代码示例
IPv4Util.java
package michael.utils;
import java.net.InetAddress;
/**
* 用于IP和整数之间的相互转换
* @author Andy.Wang
*
*/
public class IPv4Util {
private final static int INADDRSZ = 4;
/**
* 把IP地址转化为字节数组
* @param ipAddr
* @return byte[]
*/
public static byte[] ipToBytesByInet(String ipAddr) {
try {
return InetAddress.getByName(ipAddr).getAddress();
} catch (Exception e) {
throw new IllegalArgumentException(ipAddr + " is invalid IP");
}
}
/**
* 把IP地址转化为int
* @param ipAddr
* @return int
*/
public static byte[] ipToBytesByReg(String ipAddr) {
byte[] ret = new byte[4];
try {
String[] ipArr = ipAddr.split("\\.");
ret[0] = (byte) (Integer.parseInt(ipArr[0]) & 0xFF);
ret[1] = (byte) (Integer.parseInt(ipArr[1]) & 0xFF);
ret[2] = (byte) (Integer.parseInt(ipArr[2]) & 0xFF);
ret[3] = (byte) (Integer.parseInt(ipArr[3]) & 0xFF);
return ret;
} catch (Exception e) {
throw new IllegalArgumentException(ipAddr + " is i