示例代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String str = sc.nextLine();
String res;
if (str.contains(".")) {
res = ipToNum(str).toString();
} else {
res = numToIp(str);
}
System.out.println(res);
}
}
/**
* 将ip转化为十进制数字
*/
public static Long ipToNum(String ip) {
String[] split = ip.split("\\.");
StringBuilder res = new StringBuilder("");
for (String s : split) {
StringBuilder temp = new StringBuilder(Long.toBinaryString(Long.parseLong(s)));
while (temp.length() < 8) {
temp.insert(0, "0");
}
res.append(temp);
}
// 将二进制数字转换为十进制
return Long.parseLong(res.toString(), 2);
}
/**
* 将十进制数字转化为ip地址
*/
public static String numToIp(String num) {
// 将十进制数字转化为二进制
StringBuilder binaryString = new StringBuilder(Long.toBinaryString(Long.parseLong(num)));
while (binaryString.length() < 32) {
binaryString.insert(0, "0");
}
String[] strs = new String[4];
for (int i = 0; i < 4; i++) {
// 将每一个二进制数字转化为十进制ip节点
strs[i] = String.valueOf(Long.parseLong(binaryString.substring(i * 8, i * 8 + 8), 2));
}
return String.join(".", strs);
}
代码详解:
1. 这种进制转换我们只需要记住XXXX.parseXXXX(string, "进制数") 方法就行了,这个方法可以将其他进制的数字转化为十进制,Integer 和 Long 中的 toBinaryString 方法都可以将其参数转化为二进制数字;
2. 然后最后一个 String.join() 方法,在数组中添加所给元素。