IP2Long与Long2IP

最近在做项目中要求将IP转换为Long类型的数据再进行存储, 在Java中好像没有能直接互相转换的工具类, 特此写个工具类记录一下:

package com.itstone.mok.test;

public class IP2LongUtil {

    public static void main(String[] args) {
        // 3232238895
        System.out.println(ipToLong("192.168.13.47:19093"));
        // 192.168.13.47
        System.out.println(longToIP(3232238895L));
    }

    /**
     * ip --> long: 
     * 1.将ip地址按字符串读入,用分隔符分割开后成为一个字符串数组{xyzo};
     * 2.将数组里的字符串强转为Long类型后执行:x^24+y^16+z^8+o 得到最后的返回值;
     * 3.这里的加权采用移位(<<)完成;
     *
     * @param ip ip地址
     * @return 转换后的long类型值
     */
    public static long ipToLong(String ip) {
        String[] splits = ip.split(":");
        // 将端口排除掉
        String[] strArray = splits[0].split("\\.");
        return (Long.parseLong(strArray[0]) << 24) +
                (Long.parseLong(strArray[1]) << 16) +
                (Long.parseLong(strArray[2]) << 8) +
                (Long.parseLong(strArray[3]));
    }

    /**
     * long --> ip:
     * ip的第一部分:整数右移24位。
     * ip的第二部分:整数先高8位置0.再右移16位。
     * ip的第三部分:整数先高16位置0.再右移8位。
     * ip的第四部分:整数高24位置0.
     *
     * @param longIp
     * @return
     */
    public static String longToIP(long longIp) {
        return "" + (longIp >> 24) + "." +
                ((longIp & 0x00ffffff) >> 16) + "." +
                ((longIp & 0x0000ffff) >> 8) + "." +
                (longIp & 0x000000ff);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值