IP地址与int整数的转换
约 430 字大约 1 分钟
2025-03-02
将ip地址转换成10进制整数。
例如,ip地址为10.0.3.193,把每段拆分成一个二进制形式组合起来为00001010 00000000 00000011 11000001
,然后把这个二进制数转变成十进制整数就是167773121。
位运算
IP地址中的每一段都是0-255的整数,所以每一段最多8位,即一个字节。
左移8位,或运算。
右移8位,与运算。
import java.util.Scanner;
public class Solution {
// 将IP地址转换为整型
public static long ipToInt(String ip) {
String[] ipSegments = ip.split("\\."); // 以"."分割IP地址为四段
// 注意是long,因为ip最多有12位,大于int的8位。
long result = 0;
// 遍历每一段,将每一段通过移位组合成最终的整型结果
for (int i = 0; i < 4; i++) {
// 左移运算符 << 会将数字的二进制形式左移指定的位数,并在右侧用0补齐。
// 注意是位运算——|不是逻辑或——||。
result = (result << 8) | Integer.parseInt(ipSegments[i]);
}
return result;
}
// 将整型转换为IP地址
public static String intToIp(long num) {
StringBuilder ip = new StringBuilder();
// 遍历4次,将每一段IP地址的值取出
for (int i = 3; i >= 0; i--) {
ip.insert(0, (num & 255)); // 取出最后8位的值。注意insert方法
if (i > 0) {
ip.insert(0, "."); // 插入"."分隔符
}
num >>= 8; // 右移8位,继续处理下一段。注意是>>=不是>>
}
return ip.toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 循环读取输入,直至没有更多输入
while (scanner.hasNext()) {
String ip = scanner.next();
long num = scanner.nextLong();
// 输出IP地址转换为整型的结果
System.out.println(ipToInt(ip));
// 输出整型转换为IP地址的结果
System.out.println(intToIp(num));
}
scanner.close();
}
}