整数与ip地址之间的转换

整数与IP地址间的转换

题目描述

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

的每段可以看成是一个0-255的整数,需要对IP地址进行校验

输入描述:

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

输出描述:

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

输入例子:

10.0.3.193

167969729

输出例子:

167773121

10.3.3.193

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		String ip=scanner.next();
		long num=scanner.nextLong();
		int n;
		StringBuffer result=new StringBuffer();
		StringBuffer sb;
		StringBuffer temp;
		StringBuffer ipsb=new StringBuffer();
		String[] ips;
		ips=ip.split("\.");
		for(int i=0;i<ips.length;i++){
			n=Integer.parseInt(ips[i]);
			temp=new StringBuffer(Integer.toBinaryString(n));
			while(temp.length()<8){
				temp.insert(0, 0);
			}
			ipsb=ipsb.append(temp);
		}
		sb=new StringBuffer(Long.toBinaryString(num));
		while(sb.length()<32){
			sb.insert(0, 0);
		}
		for(int i=0;i<25;i=i+8){
			long count=count(sb.substring(i, i+8));
			result.append(count+".");
		}
		System.out.println(count(ipsb.toString()));
		System.out.println(result.substring(0, result.length()-1));
	}
	
	public static long count(String s){
		int length=s.length();
		long num=0;
		int j=0;
		for(int i=length-1;i>=0;i--){
			if(s.charAt(i)==1)
				num+=(long)Math.pow(2, j);
			j++;
		}
		return num;
	}
}


经验分享 程序员 微信小程序 职场和发展