package com.test;
import java.util.Arrays;
/**
* @author djs
* @create 2023-04-12 13:01
*/
public class Test1 {
public static void main(String[] args) {
// 将IP地址转为Long型数字
// IP地址需要满足规范,符合正则校验
String ip = "255.255.255.255";
String[] ss = ip.trim().split("\\.");
/**
* 通过左移位操作(<<)给每一段的数字加权,第一段的权为2的24次方,
* 第二段的权为2的16次方,第三段的权为2的8次方,最后一段的权为1。
*/
Long a = (Long.parseLong(ss[0]) << 24) +
(Long.parseLong(ss[1]) << 16) +
(Long.parseLong(ss[2]) << 8) +
(Long.parseLong(ss[3]));
System.out.println("a = " + a);
// 将Long型数字转为IP地址
/**
* 1. 将整数值进行右移位运算(>>>),右移24位,右移时最高位补0,即得到第一段IP
* 2.通过与操作符(&),将整数值得高8位设为0,再右移16位,得到第二段IP
* 3.通过与操作符把整数值整数值得高16位设为0,再右移8位,得到第三段IP
* 4.通过与操作符把整数值得高24位设为0,得到得数字为第四段IP
*/
StringBuffer sb = new StringBuffer();
sb.append(String.valueOf((a >>> 24)));
sb.append(".");
// 将高8位置0,然后右移16位
sb.append(String.valueOf((a & 0x00FFFFFF) >>> 16));
sb.append(".");
// 将高16位置0,然后右移8位
sb.append(String.valueOf((a & 0x0000FFFF) >>> 8));
sb.append(".");
// 将高24位置0
sb.append(String.valueOf((a & 0x000000FF)));
String b = sb.toString();
System.out.println("b = " + b);
}
}
IP地址与Long型数字相互转换
于 2023-04-12 13:24:12 首次发布