【问题标题】:How to convert string to hex bytes in Java如何在Java中将字符串转换为十六进制字节
【发布时间】:2026-02-02 17:30:01
【问题描述】:

我想拆分字符串中的两个字符中的每一个并将其转换为十六进制字节数组表示, 我只是迷失了如何做到这一点。

在字符串中 a= 十六进制 a,十进制为 10 在字符串 b= 十六进制 b 中,十进制为 11

String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[12];





                          Input
 ab    bb   bb    bb  bb   bb   bb   bb   bb   bb   bb   bc
                          output
[-85, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -68]

【问题讨论】:

  • 不,我想要一个字节数组 ass 输出而不是字符串,它的字符串是十六进制而不是十六进制到字符串。
  • 您为 24 个字符的字符串保留了 12 个字节?
  • 示例(ab)a 是 msb,b 是 lsb 我想将它们组合起来并生成一个 16 位的 no,而不是将其转换为十六进制
  • in string a= hex a which is 10 in decimal in string b= hex b which is 11 in decimal 你的意思是String toConvert?多么可怕的例子!更好String toConvert = "0344A7DF";。而且您不会转换为十六进制,而是从十六进制表示解码。

标签: java android string hex


【解决方案1】:
for(int i = 0; i < 12; i++) {
    output[i] = (byte) Integer.parseInt(toConvert.substring(i*2, i*2+2), 16);
}

【讨论】:

  • 基元没有方法。也许你的意思是Integer.valueOf
  • 不,我的意思是我写的 :) 整数不是原始的。试试运行它,你会看到的。
  • 谢谢,这也很有帮助
  • @Dima 如果可以的话,我会运行它(由于上述原因,无法编译)。
  • 不鼓励仅使用代码回答。解释什么、为什么以及如何做总是更好。
【解决方案2】:

取两个一组中的第一个字符,将其十六进制值乘以16(它位于16<sup>1</sup> 位置)。该结果被添加到第二个字符的十六进制值。

String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[toConvert.length() / 2];

for (int i = 0; i < output.length; i++) {
    output[i] |= Character.digit(toConvert.charAt(i * 2), 16) * 16;
    output[i] |= Character.digit(toConvert.charAt(i * 2 + 1), 16);
}

【讨论】:

    【解决方案3】:

    Apache Common Codec 的 Hex 类完全符合您的需要:

    byte[] bytes = Hex.decodeHex("abbbbbbbbbbbbbbbbbbbbbbc".toCharArray());
    

    如果您不能/不会使用第三方,您可以随时“借用”他们的实现(稍微简化 - 为了简单起见,我省略了正确性检查):

    public static byte[] decodeHex(final char[] data) {
    
      final int len = data.length;
    
      // Handle empty string - omitted for clarity's sake
    
      final byte[] out = new byte[len >> 1];
    
      // two characters form the hex value.
      for (int i = 0, j = 0; j < len; i++) {
          int f =  Character.digit(data[j], 16) << 4;
          j++;
          f = f | Character.digit(data[j], 16);
          j++;
          out[i] = (byte) (f & 0xFF);
      }
    
      return out;
    }
    

    【讨论】:

      最近更新 更多