整数与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);
}
*/
}