如何在Java中将字符串转换为十六进制字节

时间:2014-11-22 15:05:25

标签: java android string hex

我想在字符串中拆分两个字符中的每一个并将其转换为十六进制字节数组表示, 我只是失去了怎么做。

在字符串a = hex 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]

3 个答案:

答案 0 :(得分:1)

取一组两个中的第一个字符,将其十六进制值乘以16161位置中的#)。该结果将添加到第二个字符的十六进制值中。

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);
}

答案 1 :(得分:0)

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;
}

答案 2 :(得分:0)

for(int i = 0; i < 12; i++) {
    output[i] = (byte) Integer.parseInt(toConvert.substring(i*2, i*2+2), 16);
}