Ответ 1
Используйте String hex = String.format("0x%02X", (int) array[i]);
, чтобы указать HexDigits с 0x
перед строкой.
Лучшее решение конвертирует int
в byte
напрямую:
bytes[i] = (byte)array[i];
Я хочу преобразовать строку с помощью одиночного 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);
}
Используйте String hex = String.format("0x%02X", (int) array[i]);
, чтобы указать HexDigits с 0x
перед строкой.
Лучшее решение конвертирует int
в byte
напрямую:
bytes[i] = (byte)array[i];
Есть ли причина, по которой вы пытаетесь пройти через строку? Потому что вы могли бы просто сделать это:
bytes[i] = (byte) array[i];
Или даже замените весь этот код на:
byte[] bytes = s.getBytes(StandardCharsets.US_ASCII);
Вы можете преобразовать из char
в hex String
с помощью String.format():
String hex = String.format("%04x", (int) array[i]);
Или угрожайте char
как int
и используйте:
String hex = Integer.toHexString((int) array[i]);
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);
}