【问题标题】:ASCII to HEX string in Java returns ASCII value and not HEXJava中的ASCII到HEX字符串返回ASCII值而不是HEX
【发布时间】:2017-07-21 08:09:39
【问题描述】:

我正在尝试将 ASCII 字符串转换为 HEX。但由于某种原因,它给了我 ASCII 值而不是 HEX 值。

这是我的代码:

public String toHex(String strToConvert) {
    ByteBuffer bb = ByteBuffer.wrap(strToConvert.getBytes("UTF-8"));
    StringBuilder sb = new StringBuilder();
    while (bb.hasRemaining()) {
        sb.append(bb.get());
    }
    return sb.toString();
}

函数调用如下:toHex("A");。我做错了什么?

【问题讨论】:

  • 您希望在哪里转换为十六进制?你基本上是用每个字节依次调用StringBuilder.append(int)。 (不清楚你为什么要让ByteBuffer 参与其中。)StringBuilder.append(int) 被记录为:“将 int 参数的字符串表示附加到这个序列。整体效果就像参数被转换为通过 String.valueOf(int) 方法创建字符串,然后将该字符串的字符附加到此字符序列中。”这在哪里说明了十六进制转换?

标签: java hex ascii


【解决方案1】:

尝试使用:

System.out.println(String.format("%02X", char_value))

【讨论】:

    【解决方案2】:

    您的代码中没有任何内容可以将从缓冲区获取的字节转换为十六进制;您正在调用的 sb.append(int) 方法将其转换为十进制,而不是十六进制。一种解决方案是这样做:

    sb.append(String.format("%02X", bb.get()));
    

    请注意,您将方法称为“ASCII 到十六进制”,但实际上并没有使用 ASCII - 您使用的是 UTF-8,它与 ASCII 不完全相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-05
      • 2013-04-01
      • 2019-06-20
      • 2021-12-14
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多