【面試題】將ip地址轉換成整數
阿新 • • 發佈:2019-01-02
題目:將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