Строка Java, от одного символа до шестнадцатеричных байтов

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

нравится

String s = "ABOL1";

to

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);
}                

person Sarah0050    schedule 28.04.2015    source источник
comment
char не byte!   -  person fge    schedule 28.04.2015
comment
Не существует такого понятия, как «шестнадцатеричный байт». Данные уже в нужном вам формате. Просто скопируйте байты.   -  person user207421    schedule 28.04.2015


Ответы (4)


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

Лучшим решением является преобразование int в byte напрямую:

bytes[i] = (byte)array[i];
person locoyou    schedule 28.04.2015

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

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

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

byte[] bytes = s.getBytes(StandardCharsets.US_ASCII);
person weston    schedule 28.04.2015

Вы можете преобразовать char в шестнадцатеричный String с помощью String.format():

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

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

String hex = Integer.toHexString((int) array[i]);
person Jordi Castilla    schedule 28.04.2015

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);
}
person Klas Lindbäck    schedule 28.04.2015