题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String ip = in.nextLine(); String number = in.nextLine(); System.out.println(ip2Num(ip)); System.out.println(num2Ip(Long.parseLong(number))); } private static long ip2Num(String ip) { String[] split = ip.split("\\."); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 4; i++) { sb.append(num2Str(split[i])); } return Long.parseLong(sb.toString(), 2); } // 数值转IP private static String num2Ip(long number) { String binStr = Long.toBinaryString(number); // 补齐32位 StringBuilder complete0 = new StringBuilder(); if (binStr.length() != 32) { for (int i = 0; i < 32 - binStr.length(); i++) { complete0.append("0"); } } binStr = complete0 + binStr; // 总共也就4个数,都不用去写什么循环 StringBuilder ip = new StringBuilder(); ip.append(Integer.parseInt(binStr.substring(0, 8), 2)).append("."); ip.append(Integer.parseInt(binStr.substring(8, 16), 2)).append("."); ip.append(Integer.parseInt(binStr.substring(16, 24), 2)).append("."); ip.append(Integer.parseInt(binStr.substring(24, 32), 2)); return ip.toString(); } /** * 将字符串类型的数字转成2进制并补齐8位 * * @param number * @return */ private static String num2Str(String number) { String binStr = Integer.toBinaryString(Integer.parseInt(number)); StringBuilder complete0 = new StringBuilder(); for (int i = 0; i < 8 - binStr.length(); i++) { complete0.append("0"); } return complete0.toString() + binStr; } }