0

我有一个字符串缓冲区,strbuf=161656070200000000202020202001000000009E52;.

我想转换成如下所示的字节数组:

byte[] byte_array=new byte[]
 {(byte)0x16,(byte)0x16,(byte)0x56,(byte)0x07,
  (byte)0x02,(byte)0x00,(byte)0x00,(byte)0x00,
  (byte)0x00,(byte)0x20,(byte)0x20,(byte)0x20,
  (byte)0x20,(byte)0x20,(byte)0x01,(byte)0x00,
  (byte)0x00,(byte)0x00,(byte)0x00,(byte)0x9E,(byte)0x52};

我需要转换strbufhex字符串然后再做 getBytes()吗?解决这个问题的正确方法是什么?

4

3 回答 3

8

您可以尝试以下方法。

final String longHex = "161656070200000000202020202001000000009E52";
byte[] bytes = new BigInteger(longHex, 16).toByteArray();
System.out.println(Arrays.toString(bytes));

印刷

[22, 22, 86, 7, 2, 0, 0, 0, 0, 32, 32, 32, 32, 32, 1, 0, 0, 0, 0, -98, 82]
于 2011-11-18T11:23:07.890 回答
5

让我们分解问题,然后在这里倒退。

你知道吗:

  • 如何将 a 转换int为 a byte(假设前者在范围内)?
  • 如何将两个字符转换String为一个字符int
  • 如何将长字符串转换为每个两个字符的块?

我怀疑您可以单独完成任何这些任务。只需按顺序(以相反的顺序)完成所有这些操作,即可获得您正在寻找的解决方案。

</teaching-to-fish>

于 2011-11-18T11:23:50.820 回答
0
String longHex = "....";
byte[] array = new byte[longHex.length() / 2];
for (int i=0; i<array.length; i++){
     Byte byte = Byte.parseByte(longHex.substring(i*2, i*2+2), 16);
     array[i] = byte;
}
于 2011-11-18T11:25:08.480 回答