1.原理
ip用8位一组一共四组如250.254.253.1表示,实际是32位;
int是4字节,一共4*8=32位
public class IpToLongNumber {
public static void main(String[] args) {
IpToLongNumber toLongNumber = new IpToLongNumber ();
String ip = "250.254.253.1";
long res = toLongNumber.ipToLong(ip);
System.out.println(res);
String ipStr = toLongNumber.longIpToStr(res);
System.out.println(ipStr);
return;
}
public String longIpToStr(long ip) {
String[] x = new String[4];
x[3] = (ip >> 24) + "";
x[2] = ((ip & 0x00ffffff) >> 16) + "";
x[1] = ((ip & 0x0000ffff) >> 8) + "";
x[0] = ((ip & 0x000000ff)) + "";
return String.join(".", x);
}
public long ipToLong(String ip) {
String[] ips = ip.split("\\.");
long res = 0;
res = Integer.parseInt(ips[3]) << 24
| Integer.parseInt(ips[2]) << 16
| Integer.parseInt(ips[1]) << 8
| Integer.parseInt(ips[0]);
return res;
}
}
IP如250.254.253.1,用点分割成四个数字,每个数字是表示8位,一共32位ip地址
|: 异或,只有当全0的时候结果才是0,在这里起到求和的作业
&: 同,只有当全1的时候结果才是1,在这里可以把不用的位置置为0