【面试题】将ip地址转换成整数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Somnus_k/article/details/82491768

题目:将ip地址转换成整数

开始用了最粗暴的方法,将四段分别转换成二进制连接起来,然后扫描一遍,累加求和。效率太低。

假设ip地址:110.111.112.113,即为A.B.C.D,转换成整数只需要将D左移0位(不需要移动),C左移8位,B左移16位,A左移24位即可。

public class IP2Integer {

	public static void main(String[] args) {
		String ip = "110.111.112.113";
		String[] s = ip.split("\\.");
		System.out.println(Arrays.toString(s));
		long ipl = (Long.parseLong(s[0])<<24)+(Long.parseLong(s[1])<<16)
				+(Long.parseLong(s[2])<<8)+(Long.parseLong(s[3]));
		System.out.println(ipl);
	}
}

输出:1852797041

如果要将整数转换成ip地址,该怎么操作呢?

对于整数X=1852797041,其对应的二进制可以记为ABCD,每个字母表示8位,只需将X右移24位即可得到A,然后将X中的A部分置为0,右移16位即可得到B,同理得到C和D,用“.”连接起来即可。

public class Integer2Ip {

	public static void main(String[] args) {
		long ipl =1852797041l;
		
		long A = ipl>>24;
		long B = (ipl&0x00FFFFFF)>>16;
		long C = (ipl&0x0000FFFF)>>8;
		long D = ipl&0x000000FF;
		
		String ip = new StringBuffer().append(A).append(".").append(B).append(".")
				.append(C).append(".").append(D).toString();
		System.out.println(ip);
	}
}

结果:110.111.112.113

猜你喜欢

转载自blog.csdn.net/Somnus_k/article/details/82491768