object Test01_IP地址计算 {
def main(args: Array[String]): Unit = {
val ip:String = "1.0.3.255"
val ipArr: Array[Int] = ip.split("\\.").map(_.toInt)
println((ipArr(0) << 24) + (ipArr(1) << 16) + (ipArr(2) << 8) + ipArr(3))
}
}
将字符串类型的IP地址,按照"\\."进行切割
将切割的字符串数组使用map遍历将每个元素转换为整数类型
再使用位运算符计算结果
第一位左移24位
第二位左移16位
第三位左移8位
第四位左移0位
1.0.3 .255------二进制为----00000001.00000000.00000011.11111111
第二种方法
将ip地址分为4段
从左往右依次读取
例如1.0.3 .255,就是1、0、3、255
将每一位转换成Long类型再和(之前计算得到的并向左移动了8位)的数据用位运算符“|”计算
刚开始ipNum为0(左移八位),split[0]为1,得到1
再一次ipNum为1(左移八位),split[1]为0,得到256---1,0000,0000
再一次ipNum为256(左移八位),split[2]为3,得到65539---1,0000,0000,0000,0011
再一次ipNum为65539(左移八位),split[3]为255,得到16,778,239---1,0000,0000,0000,0011,1111,1111
private Long ip2Long(String ip) {
String[] split = ip.split("[.]");
Long ipNum = 0L;
for (int i = 0; i < split.length; i++) {
ipNum = Long.parseLong(split[i]) | ipNum << 8L;
}
return ipNum;
}