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

Posted

技术标签:

【中文标题】将十六进制字符串转换为 IP 地址【英文标题】:Convert hexadecimal string to IP Address 【发布时间】:2013-07-03 14:06:08 【问题描述】:

我想将字符串值(十六进制)转换为 IP 地址。如何使用 Java 来实现?

十六进制值:0A064156

IP:10.6.65.86

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

可以直接在 XSLT 中完成吗?

【问题讨论】:

1.将字符串拆分为长度为 2 的子字符串。 2. 将所有子字符串转换为 dezimal。 3. 在所有子串之间插入点。 【参考方案1】:

试试这个

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

DatatypeConverter 来自标准 javax.xml.bind

【讨论】:

+1。我真的很喜欢这个答案。没有很多代码或字符串操作,并为您提供您想要的。 非常感谢!甜美而精确。 注意:由于Java 9 DatatypeConverter 不再是标准的一部分:github.com/http-kit/http-kit/issues/356【参考方案2】:

您可以将十六进制值分成 2 个一组,然后将它们转换为整数。

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。 docs.oracle.com/javase/7/docs/api/java/lang/…【参考方案3】:
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();

【讨论】:

【参考方案4】:

您可以使用以下方法:

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;

【讨论】:

【参考方案5】:

接受的答案要求十六进制必须是偶数长度。 这是我的答案:

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;

【讨论】:

【参考方案6】:

你可以把它分成2个字符,然后用Integer.parse(string, radix)转换成整数值

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String,int)

更新: 更新文档的链接: https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#parseInt-java.lang.String-int-

【讨论】:

链接已失效。

以上是关于将十六进制字符串转换为 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

在Python中将IP地址字符串转换为二进制

excel里将16进制转换为IP地址

如何将Mac地址转换为十六进制并将其传递给java中的字节数组

IP地址转换函数

将字符串 IP 转换为 IPADDRESS 控件

ip地址与整数转换