在Java中将StringBuffer转换为字节数组

在Java中将StringBuffer转换为字节数组,java,bytearray,stringbuffer,Java,Bytearray,Stringbuffer,我有一个StringBuffer,strbuf=16165607020000002020001000000009E52 我想转换成如下所示的字节数组: 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, (b

我有一个StringBuffer,
strbuf=16165607020000002020001000000009E52

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

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
strbuf
转换为
hex
字符串,然后执行
getBytes()

解决这个问题的正确方法是什么?

您可以尝试以下方法

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]

让我们把这个问题分解一下,然后在这里反向工作

你知道吗

  • 如何将
    int
    转换为
    字节
    (假设前者在范围内)
  • 如何将两个字符的
    字符串
    转换为
    int
  • 如何将一个长字符串转换成两个字符的块
我怀疑您能够单独完成这些任务中的任何一项。简单地按顺序(按相反的顺序)执行所有这些操作将产生您正在寻找的解决方案

字符串longHex=“…”;
byte[]数组=新字节[longHex.length()/2];

对于(int i=0;i不要问我知道什么,我想最好你用你的“系统”来解释我们也许吧。但是,仅仅给你一段代码就可以让你复制粘贴,继续前进,然后在下次陷入困境时再回来。相反,引导你自己完成实现解决方案所需的步骤更耗时,但这意味着你将来可以自己解决类似的问题,这会让你成为一名更好的开发人员我不知道该说什么。因为我找不到解决方案,所以我发布了这个问题。非常感谢你。。
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;
}