题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
使用Long类型
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//IP地址
String str1 = sc.nextLine();
//10进制IP地址
String str2 = sc.nextLine();
//Q1. 10进制转2进制
String[] str1s = str1.split("\\.");
//生成二进制串
StringBuffer binarySb = new StringBuffer();
for (String s : str1s) {
String binaryStr = Integer.toBinaryString(Integer.parseInt(s));
//补齐到8位
String completeBinaryStr = Main.autoComplete(binaryStr, "0", 8);
binarySb.append(completeBinaryStr);
}
//二进制串转十进制
Long decimalIp = Long.parseLong(binarySb + "", 2);
System.out.println(decimalIp);
//Q2. 2进制 转 10进制
//int binaryIP
String binaryIP = Long.toBinaryString(Long.parseLong(str2));
String completedIP = Main.autoComplete(binaryIP, "0", 32);
StringBuffer sb = new StringBuffer();
//seperate
String sperateStr = "";
for (int i = 0; i < 4; i++) {
sperateStr = completedIP.substring(i * 8, (i + 1) * 8);
int sperateIp = Integer.parseInt(sperateStr, 2);
sb.append(sperateIp + ".");
}
System.out.println(sb.substring(0, sb.length() - 1));
}
public static String autoComplete(String str, String symbol, int fixedLen) {
int strLen = str.length();
int neededLen = fixedLen - strLen;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < neededLen; i++) {
sb.append(symbol);
}
return sb + str;
}
}
