版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013219624/article/details/83347076
1.背景介绍
一般数据库存储IP,不直接存IP;而是将IP转为长整型进行存储,这就是工具类的由来。
2.IpUtils源码
public final class IpUtils {
private IpUtils() { }
public static long ip2Long(String ipAddress) {
if (StringUtils.isBlank(ipAddress)) {
return 0;
}
long result = 0;
String[] ipAddressInArray = ipAddress.split("\\.");
for (int i = 3; i >= 0; i --) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
result |= ip << (i * 8);
}
return result;
}
public static String long2Ip(long ip) {
StringBuilder sb = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
sb.insert(0, Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
ip = ip >> 8;
}
return sb.toString();
}
}
3.测试
public static void main(String[] args) {
long longIP = ip2Long("255.102.11.10");
System.out.println(longIP);
System.out.println(long2Ip(longIP));
}
4.数据库操作时,IP查询
ip to long
select INET_ATON('101.81.88.85') FROM DUAL;
long to ip
select INET_NTOA('1699829845') FROM DUAL;
源码 https://gitee.com/jsjack_wang/springboot-demo dev-utils分支