Преобразовать StringBuffer в байтовый массив в Java - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть 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()? Как правильно подойти к этой проблеме?

Ответы [ 3 ]

8 голосов
/ 18 ноября 2011

Вы можете попробовать следующее.

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]
5 голосов
/ 18 ноября 2011

Давайте разберем проблему и поработаем здесь.

Знаете ли вы:

  • Как преобразовать int в byte (при условии, что первоев диапазоне)?
  • Как преобразовать двухсимвольный String в int?
  • Как преобразовать длинную строку в куски по два символа каждый?

Я подозреваю, что вы можете выполнить любую из этих задач индивидуально.Простое выполнение всех этих действий в последовательности (в обратном порядке) даст искомое решение.

</teaching-to-fish>

0 голосов
/ 18 ноября 2011
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;
}
...