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

时间:2012-08-21 15:05:29

标签: java parsing

示例:

// using Integer.parseInt
int i = Integer.parseInt("123");

你会如何做同样的事?

// using Integer.parseInt
int i = Integer.parseInt("123.45.55.34");

5 个答案:

答案 0 :(得分: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]);
}

或者这个:

// 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));
}

当然,作为others have suggested,使用InetAddress可能比自己做事更合适......

答案 1 :(得分:13)

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

执行此操作将InetAdress转换为其整数表示形式:

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

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

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

答案 2 :(得分:7)

您需要意识到123.45.55.34形式的IPv4地址实际上是4个三位数字,代表地址的每个字节。一次解析整个字符串都无法正常工作。

其他人提到过使用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;
}

答案 3 :(得分:0)

df[lapply(sapply(strsplit(as.character(df$value), ", "), fun), sum) > 0,]IPAddressUtil#textToNumericFormatV4更好地获取ip的字节,此外,它会检查ip是否有效

String#split

答案 4 :(得分:0)

System.out.println(
        ByteBuffer.allocate(Integer.BYTES)
        .put(InetAddress.getByName("0.0.1.0").getAddress())
        .getInt(0));

输出:

  

256