将点分式的IP地址转换成长整型

简介:  <pre class="java" name="code">/** * */ package test; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.ByteBuffer; /** * @author wKF46214 * *
 
/**
 * 
 */
package test;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;

/**
 * @author wKF46214
 * 
 */
public class IpConvert
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        try
        {
            long ip1 = convertIpFromString2Long("1.1.1.1");
            long ip2 = convertIpFromString2Long("255.255.255.255");
            System.out.println(ip1);
            System.out.println(ip2);
            long a = 3294967295L;
            String ip3 = convertIpFromLong2String(a);
            System.out.println(ip3);
        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
    }

    /**
     * 将点分式的IP地址转换成长整型
     * @param ip
     * @return
     * @throws UnknownHostException
     */
    public static long convertIpFromString2Long(String ip) throws UnknownHostException
    {
        if (ip == null || ip.equals(""))
        {
            return 0;
        }

        InetAddress ipaddr = InetAddress.getByName(ip);
        byte[] bas = ipaddr.getAddress();
        int result = 0;
        result |= ((short) (bas[0] & 0x00ff) << 24);
        result |= ((short) (bas[1] & 0x00ff) << 16);
        result |= ((short) (bas[2] & 0x00ff) << 8);
        result |= (short) (bas[3] & 0x00ff);

        return convertUnsignedInt2Long(result);
    }

    public static long convertUnsignedInt2Long(int value)
    {
        long ret;

        ret = value >>> 1;
        ret <<= 1;
        ret |= (value << 31) >>> 31;

        return ret;
    }

    /**
     * 将长整型的IP地址转换成点分式
     * 
     * @param ip
     * @return
     * @throws UnknownHostException
     */
    public static String convertIpFromLong2String(long ip) throws UnknownHostException
    {
        if (ip <= 0)
        {
            return "";
        }

        ByteBuffer buf = ByteBuffer.allocate(4);
        // buf.order(ByteOrder.LITTLE_ENDIAN);//必须转换成小头序,才能正确显示IP
        buf.putInt(convertLong2UnsignedInt(ip));

        InetAddress addr = InetAddress.getByAddress(buf.array());
        return addr.getHostAddress();
    }

    public static int convertLong2UnsignedInt(long value)
    {
        int ret;

        ret = (int) (value & 0x00000000ffffffff);

        return ret;
    }

}

 


 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
SQL 数据库
MyBatisPlus-null判定及查询指定字段
MyBatisPlus-null判定及查询指定字段
1232 0
|
Linux
Linux 系统时间同步 ​使用 NTP 服务时间同步​
Linux 系统时间同步 ​使用 NTP 服务时间同步​
720 2
|
9月前
|
数据安全/隐私保护
怎么更改AD域用户账号和密码_AD域管理中那些实用的软件
在AD域管理中,用户常需重置密码,管理员也面临大量密码相关工单的困扰。为此,ADSelfService Plus作为自助工具,支持用户通过短信或邮件验证修改密码,并提供密码过期提醒功能,极大减轻管理员负担。而ADManager Plus则专注于批量处理,帮助管理员高效完成账户和密码的批量重置等任务。两者各有侧重:ADSelfService Plus侧重用户自助,ADManager Plus提升管理员效率,结合使用可显著优化AD域管理流程。
679 4
|
9月前
|
SQL 机器学习/深度学习 数据挖掘
【Uber 面试真题】SQL :每个星期连续5星评价最多的司机
本文是【SQL周周练】系列的第一篇,作者“蒋点数分”分享了一道来自Uber面试的真题及其解法。题目要求找出每周连续获得5星好评最多的司机ID。文章详细解析了利用SQL窗口函数解决“连续”问题的思路,并通过Python和NumPy生成模拟数据,最终提供Hive SQL解答方案。后续还将涉及Streamlit应用、时间序列分析、AB实验设计等内容,欢迎关注。
265 16
|
Oracle 关系型数据库 Go
19c 数据库安装之前安装RU
19c 数据库安装之前安装RU
286 3
|
10月前
|
存储 JSON API
淘宝商品详情API接口概述与JSON数据示例
淘宝商品详情API是淘宝开放平台提供的核心接口之一,为开发者提供了获取商品深度信息的能力。以下是技术细节和示例:
|
搜索推荐 API 对象存储
10分钟学会构建端到端的图片搜索服务
本文介绍在没有向量数据的情况下,怎样通过OpenSearch-向量检索版快速从零搭建图像搜索服务。
83736 69
|
存储 数据采集 弹性计算
日志服务SLS入门指南
简述日志服务SLS及日志采集、信息脱敏和告警接入相关操作
|
SQL Java 数据库
5、Mybatis-Plus 常用注解
这篇文章详细介绍了Mybatis-Plus中常用的注解,包括解决实体类与数据库表名不一致、字段不匹配的问题,主键生成策略的配置,以及逻辑删除的实现方法。
5、Mybatis-Plus 常用注解
|
边缘计算 算法 物联网
5G 中的多用户MIMO:赋予无线通信更高效率
5G 中的多用户MIMO:赋予无线通信更高效率
1571 0