Я получаю двоичные файлы от устройства IoT.Я пытаюсь преобразовать некоторый идентификатор, состоящий из списка длиной до 13 байтов, в наименьшую возможную читаемую строку.
Для этого я расшифровал его в Base64, а затем преобразовал байты в шестнадцатеричный код так,что
byte[] bytes = {0x24, 0x54, 0x4b, 0x00, 0x31, 0x00, 0x0e, 0x50, 0x33, 0x42, 0x58, 0x35};
становится
4CAD4FDC15F9
Однако когда я получаю байты в расширенном ascii (в отладчике байты отображаются как отрицательные значения), преобразование в base64 возвращает пустой массив байтов.
Я использовал org.apache.tomcat.util.codec.binary.Base64, который в своей документации упоминает, что он не учитывает расширенные символы ASCII, как указано в документации:
Поскольку этот класс работает непосредственно с байтовыми потоками, а не с символьными потоками, он жестко задан только для * кодирования / декодирования кодировок символов, которые совместимы с нижней таблицей 127 ASCII (ISO-8859-1, Windows-1252), * UTF-8 и т. Д.).
Я также попробовал java.util.Base64, он работает с первым массивом байтов и выдает исключение со вторым массивом байтов :
public static String getBase64HexDeviceIdFromSerialBytes(byte[] serial) {
byte[] base64Bytes = java.util.Base64.getMimeDecoder().decode(ArrayUtils.subarray(serial, 0, 12));
String hex = BytesUtils.bytesToHex(base64Bytes);
return hex;
}
19: 39: 31.946 [main] ОШИБКА com.trackener.backend.api.device.service.DeviceService - сбой при обработке сообщенияdecode0 (Base64.java:734) в java.util.Base64 $ Decoder.decode (Base64.java:526)
Как сделать это преобразование из байтов вэта маленькая строка base64 с этими специальными символами в расширенном ascii? Если бы я мог сделать это с помощью другого метода (чтобы получить уникальный код с как можно меньшим количеством символов из массива байтов), я тоже был бы счастлив.