IPv4字符串和int32数字转换(Java版本)

ipv4的字符串和int32互转

据说实际开发会用到。之前我都是用的String的ip直接存Redis了,还是我孤陋寡闻了。
这里试着用位运算实现了一下,不敢保证是最优写法,如有更好的方式,还希望各位网友指点一下,哈哈。

下面直接上代码:


public class Test{
    @Test
    public void testIPv4AndInt32() {
        int ipv4Int32 = ipv4ToInt32("192.168.0.1");
        String ipv4 = int32ToIpv4(ipv4Int32);
        System.out.println("ipv4Int32 : " + ipv4Int32);
        System.out.println("ipv4 : " + ipv4);
    }

    /**
     * ipv4的字符串转int32 数字
     * @param ipv4 IP地址字符串
     * @return int32
     */
    public int ipv4ToInt32(String ipv4) {
        String[] ipv4Parts = ipv4.split("\\.");
        return Integer.parseInt(ipv4Parts[0]) << 24 | Integer.parseInt(ipv4Parts[1]) << 16 | Integer.parseInt(ipv4Parts[2]) << 8 | Integer.parseInt(ipv4Parts[3]);
    }

    /**
     * int32数字转String形式的ip字符串
     * @param ipv4Int32 IP地址存储在32位int数值中
     * @return String
     */
    public String int32ToIpv4(int ipv4Int32) {
        StringBuilder sb = new StringBuilder();
        sb.append(ipv4Int32 >>> 24).append('.')
            .append(ipv4Int32  >>> 16 & ((1<<8)-1) ).append('.')
            .append(ipv4Int32  >>> 8 & ((1<<8)-1) ).append('.')
            .append(ipv4Int32 & ((1<<8)-1));
        return sb.toString();
    }
}

输出如下:

ipv4Int32 : -1062731775
ipv4 : 192.168.0.1

你可能感兴趣的:(计算机网络)