题解 | #整数与IP地址间的转换#笔记丰富

整数与IP地址间的转换

https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

import java.util.*;
import java.lang.*;

/**
    总结:思路没问题,就是不知道具体如何实现
        1、无论是ip转整数还是整数转ip,都要对整数进行Long.parseLong()处理,因为你不知道它有多大。
        2、二进制数转成long,可用方法 Long.parseLong(str,2);  其中参数str必须是字符串。
        3、// 分割,最重要的是用.分割时要用 \\.  \\.会转译成\.  \.就是.
        4、Long转成二进制字符串,可用Long.toBinaryString(num);
        5、8位一取:String s = num2.substring(8 * i, 8 * i + 8);
        6、Integer转String :Integer.toString(num);
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            if (str.contains(".")) {
                System.out.println(ip2num(str));
            } else {
                System.out.println(num2ip(Long.parseLong(str)));
            }
        }
    }

    // 这里的long很重要,因为你不知道输入的数有多大,而Integer.parseLong(str)这种的都是把字符串转成对应的类型
    public static long ip2num(String str) {
        StringBuilder res = new StringBuilder();
            // 分割,最重要的是用.分割时要用 \\.  \\.会转译成\.  \.就是.
            String[] s = str.split("\\.");

            // 转换二进制,补齐八位,追加到res
            for (int i = 0; i < 4; i++) {
                int num = Integer.parseInt(s[i]);
                String num2 = Integer.toBinaryString(num);
                while (num2.length() < 8) {
                    num2 = "0" + num2;
                }
                res.append(num2);
            }
            // 表明把res.toString()这个二进制数转换为Long
            return Long.parseLong(res.toString(), 2);
    }

    public static String num2ip(Long num) {
        // 转成二进制
        String num2 = Long.toBinaryString(num);
        // 补齐32位
        while (num2.length() < 32) {
            num2 = "0" + num2;
        }
        // 分割8位,转成对应的十进制字符串
        String[] ans = new String[4];
        for (int i = 0; i < 4; i++) {
            String s = num2.substring(8 * i, 8 * i + 8);
            s = Integer.toString(Integer.parseInt(s, 2));
            ans[i] = s;
        }
        return String.join(".", ans);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务