在 Java 中将 IP 地址转换为 int/long

在本教程中,我们将了解从 IP 地址获取十进制(以 10 为基数)数字的方法。使用十进制 IP 编码(以 10 为基数)有点奇怪,尽管在浏览器中允许.

如何以十进制

IP 地址由一组 4 个数字组成。例如,如果要以十进制方式对 192.168.1.1 进行编码,则必须在 Java 中使用函数 split 并将每个放在表中的一个框中。IP地址以256为基数,转换公式如下:

192 x 256^3 + 168 x 256^2 + 1 x 256^1 + 1 x 1
3221225472 + 11010048 + 256 + 1 = 3232235777
你可以通过去浏览器
http://3232235777
用十进制数表示 IP 地址的两种方法:

1- 位移的 IP 地址

我们向左移动 n*8 位,这是一种以二进制方式获得电源的方法。下面是最后一个数字的 8 位偏移量示例 192.168.1.1:

位移
以二进制计算 (1 x 256^1) 的示例

public class IP_Decimale {

public static void main(String[] zero) {
String ip = 192.168.1.1”;
//十进制IP地址
long iplong = IPenBase10(ip);
System.out.println(iplong);
}

public static long IPenBase10(String IP address) {

long decimal = 0;

//数字用点分隔
//把每个数字放在数组的框里
String[] arrayIP = IP.address.split(\\.”);

//从右到左
for (int i = 3; i >= 0; i--) {
//转换为 long
long ip = Long.parseLong(arrayIP[3 - i]);
//向左移动 (i*8) 位,sum
long bitshift= ip <<(i*8);
十进制 += 位移;
System.out.println(ip+ <<+(i*8)+” : +位移);
}
返回十进制;
}
}
Output
192 <<24 : 3221225472
168 <<16 : 11010048
1 <<8 : 256
1 <<0 : 1
result: 3232235777

2- 256

此方法包括使用函数计算功率 Math.pow 乘以 IP 地址的数字.

public static long IPenBase10puiss(String IP address) {

long decimal = 0;
String[] arrayIP = IP.address.split(\\.”);

//从右到左
for (int i = 0; i<=3; i++) {
long ip = Long.parseLong(arrayIP[i]);
long puiss= ip * (long) Math.pow(256, 3-i);
十进制 += 幂;
System.out.println(arrayIP[i] +: ”+puiss);
}
返回十进制;
}
参考:
Network in Java: Maniping IP Addresses
Assist: how to code an IP address in decimal?
Wikipedia: Bit shifts
rice University: Java Bit Manipulation Guide
StackOverFlow: IP 地址转换为十进制,反之亦然