整數與ip地址之間的轉換
阿新 • • 發佈:2019-01-06
整數與IP地址間的轉換
題目描述
原理:ip地址的每段可以看成是一個0-255的整數,把每段拆分成一個二進位制形式組合起來,然後把這個二進位制數轉變成一個長整數。舉例:一個ip地址為10.0.3.193每段數字相對應的二進位制數10 000010100 000000003 00000011193 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; } }