【问题标题】:Convert hexadecimal string to IP Address将十六进制字符串转换为 IP 地址
【发布时间】:2023-03-05 06:32:01
【问题描述】:

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

十六进制值:0A064156

IP:10.6.65.86

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

可以直接在 XSLT 中完成吗?

【问题讨论】:

  • 1.将字符串拆分为长度为 2 的子字符串。 2. 将所有子字符串转换为 dezimal。 3. 在所有子串之间插入点。

标签: java ip hex converters


【解决方案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。

【讨论】:

【解决方案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】:

        【讨论】:

        • 链接已失效。
        猜你喜欢
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 2023-03-20
        • 2014-06-27
        • 2016-07-05
        • 1970-01-01
        • 1970-01-01
        • 2018-01-31
        相关资源
        最近更新 更多