Java —— 将IPV4地址转换为int

39 篇文章 0 订阅
32 篇文章 0 订阅

Java —— 将IPV4地址转换为int

简介

朋友面试被问到这个问题,搜了一下答案,把demo记录一下,并附上注解。

基础理论

IPV4地址识别方法 —— 点分十进制

点分十进制(Dotted Decimal Notation)全称为点分(点式)十进制表示法,是IPv4的IP地址标识方法。IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0到255。点分十进制就是用4个从0到255的数字,来表示一个IP地址。

如:192.168.1.1。

百度百科 —— 点分十进制

代码

public class Test {

    public static void main(String[] args) throws Exception{
        // 定义IP地址
        String ip = "127.0.0.1";
        System.out.println("ip.getBytes().length : " + ip.getBytes().length);
        ip = ip.trim();
        // 正则判断是否是IP
        String regular = "^[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}$";
        if(!ip.matches(regular)) {
            throw new Exception("IP地址有误!");
        } else {
            System.out.println("的确是IP。");
        }

        // IP转化为int
        // 每个IP通过Split"."截取出4段字符,再转换成二进制情况下,每段字符占8位下标,hex即是下标位置
        // IPV4的IP转换成2进制就是32位,这是硬性的基础知识
        int hex = 8;
        int ipnum = 0;

        // 如果用“.”作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
        String[] iparray = ip.split("\\.");

        for(int i=0; i<iparray.length; i++) {
            System.out.println("每段:" + Integer.parseInt(iparray[i]));
            if(Integer.parseInt(iparray[i]) > 255) {
                throw new Exception("IP地址超过255");
            }
            int f = Integer.parseInt(iparray[i]);
            System.out.println("f before : " + f);
            f = f << (iparray.length - i - 1) * hex;
            System.out.println("f after : " + f);
            ipnum += f;
        }

        System.out.println("ipnum : " + ipnum);

        String ipString =  intTop(ipnum);

        System.out.println("ipString : " + ipString);
    }

    /**
     * int数转IP
     * @param ipnum
     * @return
     */
    public static String intTop(int ipnum) {
        String intnum = "";
        int hex = 8;
        int count = 1;
        for (int j = 3; j > 0; j--) {
            intnum += ipnum / ((count << (hex * j)) - 1);
            ipnum %= count << (hex * j);
            intnum += ".";
        }
        return intnum += ipnum;
    }

}

总结

  • IPV4地址每位最大不能超过255
  • IPV4地址转是32位进制,每8位代表一段IP
    在这里插入图片描述
  • split一定要按照"\."方式编写
  • 百度百科 IPV4
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值