整数与IP地址间的转换

整数与IP地址间的转换

思路:

(1)ip 地址转整数:将 ip 地址按"."分割,对分割的四个字符串均利用Long.parseLong转位数字,对数字分别左移到相应的位置,然后用|拼接即可得到最终的整数,也可以每拼接一个字符串移动8位

(2)整数转 ip:将整数与255进行&运算得到最后8位对应的数字,进行3次右移,每次移动8位,得到相应位置对应的数字,然后拼接字符串StringBuilder对象可直接拼接数字。


知识点

1、String.split用法与转义字符'.'

“.”和“|”都是转义字符,必须得加"\\";

  如果用“.”作为分隔的话,必须是如下写法:

String.split("\\."),这样才能正确的分隔开,不能用String.split(".");

如果用“|”作为分隔的话,必须是如下写法:

String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");

2、StringBuilder对象可直接拼接数字

3、java 获取输入

先声明Scanner对象,然后利用 Scanner 对象的.haseNext 方法循环判断是否有输入;用 Scanner 对象的.nextLine 对象获取整行输入

import java.util.*;
Scanner in=new Scanner(System.in);

while(in.haseNext()){
    String ip=in.nextLine();
    String p=in.nextLint();
    
}

 

 

题目

链接:https://www.nowcoder.com/questionTerminal/66ca0e28f90c42a196afd78cc9c496ea
来源:牛客网
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

输入描述:

输入 
1 输入IP地址
2 输入10进制型的IP地址

输出描述:

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

 

//system.out.println();
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            String ip=in.nextLine();
            String p=in.nextLine();
            System.out.println(ipToTen(ip));
            System.out.println(tenToIP(p));
            
        }
    }
    public static String tenToIP(String p){
        Long n=Long.parseLong(p);
        StringBuilder builder=new StringBuilder();
        Long[] r=new Long[4];
        for(int i=0;i<4;i++){
            r[i]=n&255;
            n=n>>8;
        }
        for(int i=0;i<4;i++){
            builder.append(r[3-i]);
            if(i!=3) builder.append(".");
        }
        
        return builder.toString();
        
    }
    public static Long ipToTen(String ip){
        String[] ips=ip.split("\\.");
        long n=Long.parseLong(ips[0]);
        for(int i=1;i<4;i++){
            n=n<<8;
            n=n|Long.parseLong(ips[i]);
        }
        return n;
    }
    /*
    

Scanner in=new Scanner(System.in);
         while(in.hasNext()){
            String ip=in.nextLine();
            String p=in.nextLine();
            System.out.println(IptoTen(ip));
            TentoIp(p);
             
        }
    
    */
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值