点分十进制字符串IP和32位int整数互转Java实现

点分十进制字符串IP和32位int整数互转Java实现

比较简单基础的题,可记录和回顾基础。
IPv4(4*8)和32位的int整数刚好可以11映射,但由于int整数是有符号的,所以不能直接通过划分为四个整数,然后乘以权值(256^(0-3)),再相加来实现互转,该过程会出现int整数溢出。如果是IPv4转换为long型倒不用考虑这个问题。
这里直接通过简单的位运算来实现,首先再mark下java里的进制表示法(引自java进制表示):

System.out.println(0b101);//二进制:5  (0b开头的)
System.out.println(0e1011);//0.0
System.out.println(011);//八进制:9   (0开头的)
System.out.println(11);//十进制:11
System.out.println(0x11C);//十六进制:284   (0x开头的)

System.out.printf("%010x\n",7);//0000000007   按10位十六进制输出,向右靠齐,左边用0补齐
System.out.printf("%010o\n",13);//0000000015    按10位八进制输出,向右靠齐,左边用0补齐

System.out.printf("%x\n",7);//7   按16进制输出
System.out.printf("%o\n",13);//15   按8进制输出

System.out.println(Integer.toBinaryString(11));//1011 二进制

代码实现为:

public class TransIPtoInt
{
    private int iPToInt(String ip) throws Exception
    {
        ip = ip.trim();
        String regular = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
        String[] iparray = ip.split("\\.");
        if (!ip.matches(regular) || iparray.length != 4)
        {
            throw new Exception("Wrong IP.");
        }
        return Integer.parseInt(iparray[0]) << 24 | Integer.parseInt(iparray[1]) << 16
            | Integer.parseInt(iparray[2]) << 8 | Integer.parseInt(iparray[3]);
    }
    
    private String intToIP(int ipnum)
    {
        return (int) ((ipnum & 0xff000000L) >> 24) + "." + (int) ((ipnum & 0xff0000L) >> 16) + "."
            + (int) ((ipnum & 0xff00L) >> 8) + "." + (int) (ipnum & 0xffL);
    }
    
    public static void main(String[] args) throws Exception
    {
        TransIPtoInt tp = new TransIPtoInt();
        String ip = "232.132.72.255";
        int ipnum = tp.iPToInt(ip);
        System.out.println(ipnum);
        System.out.println(tp.intToIP(ipnum));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值