1. 程式人生 > >整數與ip地址之間的轉換

整數與ip地址之間的轉換

整數與IP地址間的轉換

題目描述

原理:ip地址的每段可以看成是一個0-255的整數,把每段拆分成一個二進位制形式組合起來,然後把這個二進位制數轉變成一個長整數。舉例:一個ip地址為10.0.3.193每段數字相對應的二進位制數10                   000010100                    000000003                    00000011193                  11000001組合起來即為:00001010 00000000 00000011 11000001,轉換為10進位制數就是:167773121,即該IP地址轉換後的數字就是它了。

的每段可以看成是一個0-255的整數,需要對IP地址進行校驗

輸入描述:

輸入輸入IP

地址輸入10進位制型的IP地址

輸出描述:

輸出輸出轉換成10進位制的IP地址輸出轉換後的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;
	}
}