「Java 开发工具」IP转整数工具类-转载收藏

203 阅读1分钟

废话不多说系列,直接展示 ~

美女背景图2.png

一、完整代码

对于 IPv4 和数值类型,我们可以放在应用层,使用 Java 来处理转换;其核心功能:

  • IP 转 整数;
  • 整数 转 IP;
package edu.study.module.up.util;

/**
 * IPv4 的转换:IP 和 整数 互转( 博客地址:https://mp.weixin.qq.com/s/jFtkd5ibOUgl7CTk9VVR8w )
 *
 * @author zero
 * @create 2021-08-03 10:38
 */
public class Ip2LongUtil {

    public static void main(String[] args) {
        System.out.println(ip2Long("192.168.0.1"));
        System.out.println(long2Ip(3232235521L));
        System.out.println(ip2Long("10.0.0.1"));
    }

    /**
     * 把字符串IP转换成long
     *
     * @param ipStr 字符串IP
     * @return IP对应的long值
     */
    public static long ip2Long(String ipStr) {
        String[] ip = ipStr.split("\\.");
        return (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16)
                + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]);
    }

    /**
     * 把IP的long值转换成字符串
     *
     * @param ipLong IP的long值
     * @return long值对应的字符串
     */
    public static String long2Ip(long ipLong) {
        StringBuilder ip = new StringBuilder();
        ip.append(ipLong >>> 24).append(".");
        ip.append((ipLong >>> 16) & 0xFF).append(".");
        ip.append((ipLong >>> 8) & 0xFF).append(".");
        ip.append(ipLong & 0xFF);
        return ip.toString();
    }

}

(2)结果实例

3232235521
192.168.0.1
167772161

三、数据库将 IP 地址存为 整数

(1)IPv4 转换
mysql> select inet_aton('192.168.0.1');
+--------------------------+
| inet_aton('192.168.0.1') |
+--------------------------+
|               3232235521 |
+--------------------------+
1 row in set (0.00 sec)
 
mysql> select inet_ntoa(3232235521);
+-----------------------+
| inet_ntoa(3232235521) |
+-----------------------+
| 192.168.0.1           |
+-----------------------+
1 row in set (0.00 sec)
(2)IPv6 转换

对于 IPv6 来说,使用 varbinary 同样可获得相同的好处,同时 MySQL 也提供了响应的转换函数,即 inet6_aton()  和 inet6_ntoa()  。

附录

  1. 原创地址:MySQL如何有效的存储IP地址及字符串IP和数值之间如何转换_痴人说梦-CSDN博客
  2. 微信转发地址:mp.weixin.qq.com/s/jFtkd5ibO…

至此,感谢阅读🙏

美女背景图2.png