Я получил такую ​​строку: "1F8B0800000000000003E3E6CFDBA5C820CBC0C09122ECA1C8C0F281CDC54B2138D2CF99C9D0C87866B788E9FC37860700B43D2BB325000000"

И теперь я хочу преобразовать эту строку в массив байтов: byte[] payload = new byte[] {0x1F, 0x8B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE3, 0xE6, 0xCF, 0xDB, 0xA5, 0xC8, 0x20, 0xCB, 0xC0, 0xC0, 0x91, 0x22, 0xEC, 0xA1, 0xC8, 0xC0, 0xF2, 0x81, 0xCD, 0xC5,0x4B, 0x21, 0x38, 0xD2, 0xC, 0xC9, 0x99, 0x99 0x78, 0x66, 0xB7, 0x88, 0xE9, 0xFC, 0x37, 0x86,0x07, 0x00, 0xB4, 0x3D, 0x2B, 0xB3, 0x25, 0x00, 0x00, 0x00 };

Кто-нибудь может мне помочь ?

Благодарность

Byte[] payload = new byte[] {0x1F, 0x8B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE3, 0xE6, 0xCF, 0xDB, 0xA5, 0xC8, 0x20, 0xCB, 0xC0, 0xC0, 0xC0 0x91, 0x22, 0xEC, 0xA1, 0xC8, 0xC0, 0xF2, 0x81, 0xCD, 0xC5,0x4B, 0x21, 0x38, 0xD2, 0xCF, 0x99, 0xC9, 0xD0, 0xC8, 0x78, 0xFC, 0x9, 0x66, 0xB7, 0xB7 0x37, 0x86,0x07, 0x00, 0xB4, 0x3D, 0x2B, 0xB3, 0x25, 0x00, 0x00, 0x00 };

-2
hahahaflying 16 Мар 2023 в 22:02
Возможно, вы можете использовать new BigInteger(payloadString, 16).toByteArray();.
 – 
gthanop
16 Мар 2023 в 22:06
1
Но будьте осторожны, если первый байт отрицательный, то есть > 0x7F при использовании предыдущего решения (может быть проблема - байт 0x00 добавлен впереди, чтобы получить положительное число)
 – 
user16320675
16 Мар 2023 в 22:07

1 ответ

Вы можете использовать цикл для преобразования каждой пары символов в строке в соответствующее значение байта и сохранить его в массиве байтов. Вот пример фрагмента кода на Java:

String hexString = "1F8B0800000000000003E3E6CFDBA5C820CBC0C09122ECA1C8C0F281CDC54B2138D2CF99C9D0C87866B788E9FC37860700B43D2BB325000000";
int length = hexString.length();
byte[] payload = new byte[length / 2];

for (int i = 0; i < length; i += 2) {
    String hex = hexString.substring(i, i + 2);
    payload[i / 2] = (byte) Integer.parseInt(hex, 16);
}

Этот код сначала инициализирует полезную нагрузку пустого массива байтов длиной, равной половине длины входной шестнадцатеричной строки, поскольку каждый байт представлен двумя шестнадцатеричными символами. Затем он перебирает строку по парам символов, извлекает каждую пару как подстроку, преобразует ее в целочисленное значение с помощью Integer.parseInt() с основанием 16 (шестнадцатеричное) и сохраняет полученное значение байта в массиве байтов.

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

0
yusufYAZICI155 16 Мар 2023 в 22:11