题解 | #整数与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); // 注意 hasNext 和 hasNextLine 的区别 String ipss = in.nextLine(); getInput(ipss); String ipp = in.nextLine(); getInput(ipp); in.close(); } public static void getInput(String input){ if(input.contains(".")){ System.out.println(IptoIn(input)); }else{ System.out.println(IntToIp(input)); } } public static long IptoIn(String ipp) { // String ipp = "10.0.3.193"; // System.out.println("ipp:" + ipp); String[] strip = ipp.split("\\."); //特殊字符.需要使用转义字符./ StringBuilder sb = new StringBuilder(); for (String str : strip) { // System.out.println("ippstr:"+str); long key = Long.parseLong(str); String binarayStr = Long.toBinaryString(key); String to8binaryStr = to8bitBinary(binarayStr); // System.out.println("binaryStr:"+to8binaryStr); sb.append(to8binaryStr); } String builder = sb.toString(); // System.out.println("bilder:"+builder); long target = Long.parseLong(builder, 2); // System.out.println("bilderint:"+target); return target; } public static String IntToIp(String strss) { // int sint = 167773121; Long sint = Long.parseLong(strss); String instr = Long.toBinaryString(sint); String int32Bit = to32bitBinary(instr); // System.out.println("instr:" + int32Bit); String[] list = listStr(int32Bit);//八位数拆分 StringBuilder sb = new StringBuilder(); for (String str : list) { int key = Integer.parseInt(str, 2); // System.out.println("target:"+key); String keyStr = key + ""; sb.append(keyStr).append(".");//00001010 00000000 00000011 11000001 } String target = sb.toString(); if (target.endsWith(".")) { target = target.substring(0, target.length() - 1); } // System.out.println("target:"+target); return target; } //不足八位的空位补零 public static String to8bitBinary(String str) { return String.format("%8s", str).replace(' ', '0'); } public static String to32bitBinary(String str) { return String.format("%32s", str).replace(' ', '0'); } //按照八位分割 public static String[] listStr(String str) { int length = str.length(); String[] strList = new String[4]; int pos =0; for (int i = 0; i < length; i += 8) { strList[pos++]=(str.substring(i, i + 8)); } return strList; } }