任务要求
完成IP地址与对应的整数的相互转化。
思路
IP格式:
[0-255].[0-255].[0-255].[0-255]
256 = 28,每一段是8位。
所以IP→Integer的话其实就是把IP按照小数点分隔开,由于".“
匹配的是任意字符,所以要用”\\."
,然后array[0]转成long型并左移24位,array[1]转成long并左移16位,array[2]转成long并左移8位,array[3]转成long,把四个long数值相加,就是IP对应的int值了。
Integer→IP的话其实就是把long整数改成二进制格式,再分割子串,这个要从右往左,先切substring(length-8, length)
,再切substring(length-16, length-8)
,然后切substring(length-24, length-16)
,剩下的substring(0, length-24)
在最高位。
IP地址→Integer
import java.util.Scanner;
public class IpToInteger {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] info = scanner.nextLine().split("\\.");
scanner.close();
long num1 = Long.parseLong(info[0])<<24;
long num2 = Long.parseLong(info[1])<<16;
long num3 = Long.parseLong(info[2])<<8;
System.out.println(num1+num2+num3+Long.parseLong(info[3]));
}
}
Integer→IP地址
import java.util.Scanner;
public class IntegerToIp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String num = Long.toString(scanner.nextLong(), 2);
int length = num.length();
System.out.println(Integer.parseInt(num.substring(0, length-24), 2) + "." +
Integer.parseInt(num.substring(length-24, length-16), 2) + "." +
Integer.parseInt(num.substring(length-16, length-8), 2) + "." +
Integer.parseInt(num.substring(length-8, length), 2));
scanner.close();
}
}