1. 程式人生 > >【面試題】將ip地址轉換成整數

【面試題】將ip地址轉換成整數

題目:將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