Подтвердить что ты не робот

Java String, одиночный char в шестнадцатеричные байты

Я хочу преобразовать строку с помощью одиночного char в 5 шестнадцатеричных байтов, а байт представляет шестнадцатеричный номер:

like

String s = "ABOL1";

к

byte[] bytes = {41, 42, 4F, 4C, 01}

Я пробовал следующий код, но Byte.decode получил ошибку, когда строка слишком велика, например "4F" или "4C". Есть ли другой способ его преобразования?

String s = "ABOL1";
char[] array = s.toCharArray();
for (int i = 0; i < array.length; i++) {
  String hex = String.format("%02X", (int) array[i]);
  bytes[i] = Byte.decode(hex);
}                
4b9b3361

Ответ 1

Используйте String hex = String.format("0x%02X", (int) array[i]);, чтобы указать HexDigits с 0x перед строкой.

Лучшее решение конвертирует int в byte напрямую:

bytes[i] = (byte)array[i];

Ответ 2

Есть ли причина, по которой вы пытаетесь пройти через строку? Потому что вы могли бы просто сделать это:

bytes[i] = (byte) array[i];

Или даже замените весь этот код на:

byte[] bytes = s.getBytes(StandardCharsets.US_ASCII);

Ответ 3

Вы можете преобразовать из char в hex String с помощью String.format():

String hex = String.format("%04x", (int) array[i]);

Или угрожайте char как int и используйте:

String hex = Integer.toHexString((int) array[i]);

Ответ 4

Byte.decode() javadoc указывает, что шестнадцатеричные числа должны быть в форме "0x4C". Итак, чтобы избавиться от исключения, попробуйте следующее:

String hex = String.format("0x%02X", (int) array[i]);

Также может быть более простой способ сделать преобразование, потому что класс String имеет метод, который преобразует строку в байты:

bytes = s.getBytes();

Или, если вы хотите необработанное преобразование в массив байтов:

int i, len = s.length();
byte bytes[] = new byte[len];
String retval = name;
for (i = 0; i < len; i++) {
    bytes[i] = (byte) name.charAt(i);
}