将十六进制字符串转换为IP地址

11

我希望将一个十六进制字符串值转换为IP地址,如何使用Java实现?

十六进制值: 0A064156

IP地址: 10.6.65.86

这个网站给出了正确的结果,但我不确定如何在我的代码中实现。

能否直接在XSLT中完成?


1
  1. 将字符串分割成长度为2的子字符串。
  2. 将所有子字符串转换为十进制。
  3. 在所有子字符串之间插入点号。
- Sirko
6个回答

17

试一试

InetAddress a = InetAddress.getByAddress(DatatypeConverter.parseHexBinary("0A064156"));

DatatypeConverter来自标准的javax.xml.bind包。


1
+1。我真的很喜欢这个答案。没有太多的代码或字符串操作,而且可以给你想要的结果。 - ARC
非常感谢!简洁明了。 - Rg90
注意:自从Java 9以后,DatatypeConverter不再是标准的一部分了:https://github.com/http-kit/http-kit/issues/356 - BullyWiiPlaza

7

你可以将十六进制值分成每两个一组,然后转换为整数。

0A = 10

06 = 06

65 = 41

86 = 56

代码:

String hexValue = "0A064156";
String ip = "";

for(int i = 0; i < hexValue.length(); i = i + 2) {
    ip = ip + Integer.valueOf(hexValue.substring(i, i+2), 16) + ".";
}

System.out.println("Ip = " + ip);

输出:

IP地址为10.6.65.86。


好的回答,只是一个打字错误。应该是 hexValue.substring。https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring(int,%20int) - Paul

0

被接受的答案有一个要求,即十六进制必须是偶数长度。 这是我的答案:

private String getIpByHex(String hex) {
    Long ipLong = Long.parseLong(hex, 16);
    String ipString = String.format("%d.%d.%d.%d", ipLong >> 24, 
        ipLong >> 16 & 0x00000000000000FF, 
        ipLong >> 8 & 0x00000000000000FF, 
        ipLong & 0x00000000000000FF);

    return ipString;
}

0
public String convertHexToString(String hex){

  StringBuilder sb = new StringBuilder();
  StringBuilder temp = new StringBuilder();

  for( int i=0; i<hex.length()-1; i+=2 ){


      String output = hex.substring(i, (i + 2));

      int decimal = Integer.parseInt(output, 16);

      sb.append((char)decimal);

      temp.append(decimal);
          temp.append(".");
  }
  System.out.println("Decimal : " + temp.toString());

  return sb.toString();

}


0
您可以使用以下方法:
public static String convertHexToIP(String hex)
{
    String ip= "";

    for (int j = 0; j < hex.length(); j+=2) {
        String sub = hex.substring(j, j+2);
        int num = Integer.parseInt(sub, 16);
        ip += num+".";
    }

    ip = ip.substring(0, ip.length()-1);
    return ip;
}

-1

链接已失效。 - user2796515

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接