题解 | #整数与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 ipWithDot = in.nextLine();
        Long ipNumber = in.nextLong();
        
        System.out.println(ip2Number(ipWithDot));
        System.out.println(number2Ip(ipNumber));
    }
    public static long ip2Number(String ipWithDot){
        String[] ipArray = ipWithDot.split("\\.");
        StringBuilder sb = new StringBuilder();
        for (String s : ipArray) {// 转二进制
            String str = Integer.toBinaryString(Integer.parseInt(s));
            while(str.length()<8){// 补0
                str = "0" + str;
            }
            sb.append(str);
        }
        return (Long.parseLong(sb.toString(),2));
    }
    public static String number2Ip(long ipNumber){
        // to 2 进制
        String num = Long.toBinaryString(ipNumber);
        // 
        while(num.length()<32){
            // fill with 0
            num = "0"+num;
        }
        int ip1 = Integer.parseInt(num.substring(0,8),2);
        int ip2 = Integer.parseInt(num.substring(8,16),2);
        int ip3 = Integer.parseInt(num.substring(16,24),2);
        int ip4 = Integer.parseInt(num.substring(24,32),2);
        return ip1+"."+ip2+"."+ip3+"."+ip4;
    }
}

注意知识点:

  1. 用点. 进行分割时, 要加反斜杠。
  2. 十进制转换成二进制 用Long.toBinaryString(ipNumber) 或 Integer.toBinaryString(Integer.parseInt(s))
  3. 十进制转16: Integer.toHexString ()
  4. 十进制转8: Integer.toOctalString()
  5. 其它进制转十进制 用Integer.parseInt(n,2); 其中2 表示2进制, 如果是16进制则写16
全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务