ip类型转负数转正数

/**
     * @description ip转换成long
     * @param addr ip
     * @return long
     */ 
    public static long addr2ip(String addr)
    {
        long[] ret = new long[4];
        String[] st = addr.split("\\.");
        try {
            ret[0] = Long.parseLong(st[0]) << 24;
            ret[1] = Long.parseLong(st[1]) << 16;
            ret[2] = Long.parseLong(st[2]) << 8;
            ret[3] = Long.parseLong(st[3]);
        } catch (Exception e) {
            log.error("IPUtil", e);
        }
        return ret[0] + ret[1] + ret[2] + ret[3];
    }
    
    /**
     * @description long型IP转换成String
     * @param ip long型ip
     * @return String
     */
    public static String ip2addr(long ip) {

        StringBuffer sb = new StringBuffer();
        sb.append(ip >> 24);
        sb.append('.');
        sb.append((ip & 0x00FF0000) >> 16);
        sb.append('.');
        sb.append((ip & 0x0000FF00) >> 8);
        sb.append('.');
        sb.append(ip & 0x000000FF);
        return sb.toString();
    }
    
    public static long sa2long(SocketAddress sa) {
        InetSocketAddress isa = (InetSocketAddress)sa;
        byte[] bytes = isa.getAddress().getAddress();
        long addr = 0;
        addr  = (long)bytes[0] & 0x000000ff;
        addr |= (long)bytes[1] << 8 & 0x0000ff00;
        addr |= (long)bytes[2] << 16 & 0x00ff0000L;
        addr |= (long)bytes[3] << 24 & 0xff000000L;
        
        addr |= (long)(isa.getPort() & 0xffff) << 32L;
        
        return addr;
    }

    public static InetSocketAddress long2sa(long addr) {

        int port = (int) ((addr >> 32L) & 0xffff);

        byte[] bytes = new byte[]{(byte)(addr & 0xffff)
                , (byte)((addr >> 8L) & 0xffff)
                , (byte)((addr >> 16L) & 0xffff)
                , (byte)((addr >> 24L) & 0xffff)};
        
        InetAddress ia = null;
        try {
            ia = InetAddress.getByAddress(bytes);
        } catch (UnknownHostException e) {
            log.error("IPUtil", e);
        }
        return new InetSocketAddress(ia, port);
    }
    
    public static long sa2long(String host, int port){
        return sa2long(new InetSocketAddress(host, port));
    }

public static long getIp(long ip){
        ip = ip & 0xFFFFFFFFL;
        return ip;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值