Java String, един символ в шестнадесетични байтове

Искам да преобразувам низ с един знак в 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