我有一个StringBuffer,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};
我是否需要将strbuf
转换为hex
字符串,然后执行getBytes()
?
解决这个问题的正确方法是什么?
答案 0 :(得分: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]
答案 1 :(得分:5)
让我们打破问题,然后在这里工作。
你知道吗:
int
转换为byte
(假设前者在范围内)?String
转换为int
?我怀疑你能够单独完成这些任务。简单地按顺序完成所有这些操作(按相反顺序)将产生您正在寻找的解决方案。
</teaching-to-fish>
答案 2 :(得分: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;
}