如何在Java中将字符串(IP号)转换为Integer

Bra*_*ane 7 java parsing

例:

// using Integer.parseInt
int i = Integer.parseInt("123");
Run Code Online (Sandbox Code Playgroud)

你会怎么做?

// using Integer.parseInt
int i = Integer.parseInt("123.45.55.34");
Run Code Online (Sandbox Code Playgroud)

Luk*_*der 17

你可能想要这样做:

// 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]);
}
Run Code Online (Sandbox Code Playgroud)

或这个:

// 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));
}
Run Code Online (Sandbox Code Playgroud)

当然,正如其他人所说,使用InetAddress可能比自己做事更合适......

  • 当然,你会想要使用`long`或者你要溢出`int`并为`127.255.255.255`以上的任何IP获取不正确的值;-) (2认同)

Den*_*ret 13

您可以为IP V4地址执行此操作,因为部件只是整数版本的四个字节.

这样做可以将InetAdress转换为其整数表示形式:

int result = 0;  
for (byte b: inetAdress.getAddress())  
{  
    result = result << 8 | (b & 0xFF);  
}
Run Code Online (Sandbox Code Playgroud)

请注意,您现在不应该使用32位整数作为IP地址,因为我们正在进入IPV6地址的时代.

编辑:要解析像"123.45.55.34"这样的字符串到java中有用的东西,你可以使用 INetAddress.getByName(yourString)

  • 如果您只想解析 IP 地址,那么使用 getByName 可能是一个坏主意,因为如果您获得了一个主机名,您将突然进行同步网络 I/O。 (2认同)

Sea*_*n F 8

IPAddress Java 库以多态方式支持 IPv4 和 IPv6。免责声明:我是该图书馆的项目经理。

以下代码适用于 IPv4 和 IPv6 地址。使用您的示例 IPv4 地址:

IPAddress addr = new IPAddressString("123.45.55.34").getAddress();
BigInteger value = addr.getValue(); // 2066560802
Run Code Online (Sandbox Code Playgroud)

如果是 IPv4,您可以直接使用 int 值:

if(addr.isIPv4()) {
    int val = addr.toIPv4().intValue(); // 2066560802
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*eck 7

您需要认识到123.45.55.34形式的IPv4地址实际上是4个三位数字,代表地址的每个字节.一次解析整个字符串是行不通的.

其他人提到过使用a InetAddress,但是如果你拥有的只是IP的字符串表示,那么就InetAddress我所知,你无法轻易实例化.

你可以做的是如下:

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;
}
Run Code Online (Sandbox Code Playgroud)