java HJ33 整数与IP地址间的转换

描述

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
 
数据范围:保证输入的是合法的 IP 序列

 

输入描述:

输入 
1 输入IP地址
2 输入10进制型的IP地址

输出描述:

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

示例1

输入:
10.0.3.193
167969729
输出:
167773121
10.3.3.193

 

 

 1 import java.io.*;
 2 import java.util.*;
 3 
 4 public class Main{
 5     public static void main(String[] args) throws IOException {
 6         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 7         String str="";
 8         while((str = br.readLine()) != null) {
 9             System.out.println(iptoLong(str));
10             long lg = Long.parseLong(br.readLine());
11             System.out.println(longtoIp(lg));
12         }
13     }
14     
15     public static Long iptoLong (String str) {
16             String[] split = str.split("\\.");  //拆分成字符串数组
17             StringBuilder sb = new StringBuilder();
18             for(int i =0; i<split.length;i++) {  //对数组的每个字符串值处理 
19                 String stmp = Integer.toBinaryString(Integer.parseInt(split[i]));  //字符串值转换为数值,然后转换成对应二进制字符串
20                 while(stmp.length() <8) {  //不足8位的左边补0
21                     stmp = "0" + stmp;
22                 }
23                 sb.append(stmp);  //添加到sb中拼接
24             }
25         return Long.parseLong(sb.toString(), 2);   //流转换位字符串,然后将二进制转换位long
26     }
27     
28     public static String longtoIp(long l) {
29         String num = Long.toBinaryString(l);
30         while(num.length() < 32) {
31             num = "0" + num;
32         }
33         
34         String[] ans = new String[4];
35         for(int i =0; i<4; i++) {
36             String s = num.substring(i*8, i*8+8);
37             s = Integer.toString(Integer.parseInt(s, 2)); //转换为10进制字符串
38             ans[i] = s;
39         }
40         return String.join(".", ans);
41     }
42 }

 

posted @ 2022-03-08 22:52  海漠  阅读(258)  评论(0编辑  收藏  举报