// Parse IP parts into an int array
int[] ip = new int[4];
String[] parts = "123.45.55.34".split("\\.");
for (int i = 0; i < 4; i++) {
ip[i] = Integer.parseInt(parts[i]);
}
或者这个:
// Add the above IP parts into an int number representing your IP
// in a 32-bit binary form
long ipNumbers = 0;
for (int i = 0; i < 4; i++) {
ipNumbers += ip[i] << (24 - (8 * i));
}
public static int parseIp(String address) {
int result = 0;
// iterate over each octet
for(String part : address.split(Pattern.quote("."))) {
// shift the previously parsed bits over by 1 byte
result = result << 8;
// set the low order bits to the current octet
result |= Integer.parseInt(part);
}
return result;
}
public int intOfIpV4(String ip) {
int result = 0;
byte[] bytes = IPAddressUtil.textToNumericFormatV4(ip);
if (bytes == null) {
return result;
}
for (byte b : bytes) {
result = result << 8 | (b & 0xFF);
}
return result;
}
7条答案
按热度按时间mjqavswn1#
你可能会想这样做:
或者这个:
当然,作为others have suggested,使用
InetAddress
可能比自己动手更合适...hl0ma9xz2#
您可以对IPV4地址执行此操作,因为这些部分只是整数版本的四个字节。
执行以下操作可将InetAdress转换为整数表示:
请注意,现在不应使用32位整数表示IP地址,因为我们正在进入IPV6地址时代。
编辑:要将“www.example.com“这样的字符串解析123.45.55.34为java中有用的内容,可以使用
INetAddress.getByName(yourString)
xmd2e60i3#
你需要知道一个www.example.com形式的IPv4地址123.45.55.34实际上是4个三位数的数字代表地址的每个字节,一次解析整个字符串是行不通的。
其他人也提到过使用
InetAddress
,但据我所知,如果您所拥有的只是IP的字符串表示,则无法轻松地示例化InetAddress
。您可以执行以下操作:
xqnpmsa84#
The IPAddress Java library以多态方式同时支持IPv4和IPv6。免责声明:我是那个图书馆的项目经理。
以下代码可用于IPv4和IPv6地址。使用示例IPv4地址:
如果是IPv4,您可以直接使用int值:
ffscu2ro5#
输出:
256
3pvhb19x6#
我想你可能误解了你自己的问题,你是想把它转换成一个整型值吗?如果你是这样做的话,那么你问题的前提就错了,因为IP号不是一个数字,而是多个字节值,它不是123456789,000,而是字节123字节455字节789和字节000,我知道这些不是真实的的字节数,但关键是这不是1230亿456789000,在我看来,你把整个东西当作一个整数,而IP地址不是这样。
voase2hg7#
IPAddressUtil#textToNumericFormatV4
比String#split
在获取ip字节数方面性能更好,此外,它还检查ip是否有效