题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
ip转数字
- 读入,Scanner,nextLine对String的ip
- 二进制,将每一段转为对应的二进制binaryString
-
转换过程中出现01,0,会忽略0,10正常,因为转换的是无符号整数 需要补齐8位,insert指定位置插入
- 长整数,valueOf(String,radix)将当前radix表示的String类型数字转为Long类型
- 读入,nextLong(),长整数表示的ip
- 二进制,32位补齐
- ip, 将每一段转为int整数,拼接加入"."符号
Integer.parseInt(duan, 2);将radix表示的String转为int类型
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ss = scanner.nextLine();
ipParse(ss);
long l = scanner.nextLong();
//数字转IP
parseIp(l);
}
private static void ipParse(String ip){
//.需要转义
String[] split = ip.split("\\.");
//ip -long,
StringBuilder builder = new StringBuilder();
for (String snum : split) {
int i = Integer.valueOf(snum);
String s = Integer.toBinaryString(i);
int need = 8-s.length();
if (need>0){
//需要补0
StringBuilder eight = new StringBuilder(s);
for (int j =0; j<need;j ++){
eight.insert(0,"0");
}
s = eight.toString();
}
builder.append(s);//二进制
}
System.out.println(Long.valueOf(builder.toString(),2));
}
private static void parseIp(Long ip){
//二进制
String ips = Long.toBinaryString(ip);
int need = 32-ips.length();
if (need>0){
//需要补0
StringBuilder tt = new StringBuilder(ips);
for (int j =0; j<need;j ++){
tt.insert(0,"0");
}
ips = tt.toString();
}
//每八位一段
int end = 8;
StringBuilder builder = new StringBuilder();
while (end <=ips.length()){
String duan = ips.substring(end - 8, end);
int i = Integer.parseInt(duan, 2);
builder.append(i);
if (end <ips.length()){
builder.append(".");
}
end += 8;
}
System.out.println(builder.toString());
}
}

查看7道真题和解析