别再纠结!IP 存储类型选择攻略来袭

ip存储

ipv4

ipv4使用long类型进行存储即可

java 复制代码
public static long ipToLong(String ipString) throws NumberFormatException {
    long result = 0;
    String[] terms = ipString.split("\\.");
    if (terms.length != 4) {
        return -1;
    }
    result += Long.parseLong(terms[0]) << 24;
    result += Long.parseLong(terms[1]) << 16;
    result += Long.parseLong(terms[2]) << 8;
    result += Long.parseLong(terms[3]);
    return result;
}

public static String longToIp(long ipLong) {
    return (ipLong >>> 24) + "." +
            ((ipLong >>> 16) & 0xFF) + "." +
            ((ipLong >>> 8) & 0xFF) + "." +
            (ipLong & 0xFF);
}

public static void main(String[] args) {
        long result = ipToLong("255.255.255.255");
        System.out.println(result);
        System.out.println(longToIp(result));
}

ipv6

ipv6使用long类型是存储不了的,需要使用BigInteger

java 复制代码
public static BigInteger ip6ToNumber(String ipv6Address) throws NumberFormatException {
    try{
        InetAddress inetAddress = InetAddress.getByName(ipv6Address);
        String hostAddress = inetAddress.getHostAddress();

        StringBuilder decimalString = new StringBuilder();
        String[] split = hostAddress.split(":");
        for(String s : split){
            // 十六进制转为十进制
            int i = Integer.parseInt(s, 16);
            // 不足五位拿0补齐
            decimalString.append(String.format("%05d",i));
        }

        return new BigInteger(decimalString.toString());
    } catch (UnknownHostException exception){
        LOGGER.error("ipv6转换失败 {}", ipv6Address, exception);
        return BigInteger.ZERO;
    }

}

参考文献

相关推荐
马可奥勒留10 小时前
世界之大,无奇不有
程序员
一只爱撸猫的程序猿16 小时前
防止外部API服务不可用拖垮系统的解决方案
spring boot·后端·程序员
货拉拉技术16 小时前
LLM 驱动前端创新:AI 赋能营销合规实践
前端·程序员·llm
冰 河16 小时前
《Mycat核心技术》第21章:高可用负载均衡集群的实现(HAProxy + Keepalived + Mycat)
分布式·微服务·程序员·分布式数据库·mycat
陈哥聊测试17 小时前
国产化替代是个伪命题?被误解多年的开源软件,如今怎么样了?
程序员·开源·产品
欧达克21 小时前
AI 嘴替,社交平台反杠机器人:第 2 篇-AI 助手
程序员
观默1 天前
AI 时代的 10 倍速学习指南
人工智能·程序员
灵感__idea1 天前
JavaScript高级程序设计(第5版):扎实的基本功是唯一捷径
前端·javascript·程序员
炼数成金2 天前
程序员副业暴利指南:用Python+AI在小红书月入1W+的终极玩法
人工智能·程序员
444A4E2 天前
C++ STL容器适配器深度剖析:从deque原理到stack/queue的底层实现
程序员