题解 | #整数与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()); } }