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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章