版权声明:本文为博主原创文章,未经博主允许不得转载。 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