0

Как преобразовать шестнадцатеричную строку в строку Java?

10

Заголовок: Проблема с декодированием шестнадцатеричной строки обратно в строку в Java

Текст:

Для целей логирования я преобразую логи в массив байтов, а затем в шестнадцатеричную строку. Теперь мне нужно вернуть это обратно в строку Java, но я не могу этого сделать.

Шестнадцатеричная строка в файле логов выглядит примерно так:

fd00000aa8660b5b010006acdc0100000101000100010000

Как я могу декодировать эту строку обратно в строку Java?

5 ответ(ов)

0

Если вы хотите преобразовать шестнадцатеричную строку в массив байтов, а затем получить строку с указанной кодировкой, вы можете использовать следующий код на Java:

byte[] bytes = javax.xml.bind.DatatypeConverter.parseHexBinary(hexString);
String result = new String(bytes, encoding);

Здесь hexString — это ваша шестнадцатеричная строка, а encoding — кодировка, которую вы хотите использовать для преобразования массива байтов в строку (например, "UTF-8").

Не забудьте импортировать необходимые библиотеки, если они еще не подключены:

import javax.xml.bind.DatatypeConverter;

Этот код сначала использует метод parseHexBinary для преобразования шестнадцатеричной строки в массив байтов, а затем создает строку на основе этих байтов с заданной кодировкой. Убедитесь, что кодировка поддерживается и корректна, иначе вы можете столкнуться с проблемами при преобразовании.

0

Чтобы преобразовать строку в шестнадцатеричном формате (String (hex)) в массив байтов (byte array), а затем в строку в кодировке UTF-8, вы можете использовать следующий метод. Обратите внимание, что ваша шестнадцатеричная строка не должна содержать ведущих пробелов или других символов.

Вот код, который выполняет данное преобразование:

public static byte[] hexStringToByteArray(String hex) {
    int l = hex.length();
    byte[] data = new byte[l / 2];
    for (int i = 0; i < l; i += 2) {
        data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)
                + Character.digit(hex.charAt(i + 1), 16));
    }
    return data;
}

Пример использования:

String b = "0xfd00000aa8660b5b010006acdc0100000101000100010000";
byte[] bytes = hexStringToByteArray(b);
String st = new String(bytes, StandardCharsets.UTF_8);
System.out.println(st);

В данном коде hexStringToByteArray принимает строку в шестнадцатеричном формате и возвращает массив байтов. Затем этот массив байтов преобразуется в строку с использованием кодировки UTF-8. Убедитесь, что передаваемая строка корректна и не содержит лишних символов, иначе преобразование может привести к ошибкам или некорректным результатам.

0

Сначала прочитайте данные, затем преобразуйте их в байтовый массив:

byte b = Byte.parseByte(str, 16);

После этого используйте конструктор String:

new String(byte[] bytes)

Если кодировка отличается от системной по умолчанию, то используйте:

new String(byte[] bytes, String charsetName)

Не забудьте передать корректный байтовый массив, чтобы получить ожидаемую строку.

0

Вы можете использовать следующий код для декодирования шестнадцатеричной строки в массив байтов:

public static byte[] decode(String hex) {
    String[] list = hex.split("(?<=\\G.{2})");
    ByteBuffer buffer = ByteBuffer.allocate(list.length);
    System.out.println(list.length);
    for(String str : list) {
        buffer.put(Byte.parseByte(str, 16));
    }
    return buffer.array();
}

После того как вы получите массив байтов с помощью метода decode, вы можете создать строку, используя этот массив байтов. Например, вы можете сделать это следующим образом:

byte[] byteArray = decode("your_hex_string_here");
String result = new String(byteArray);

Вам нужно убедиться, что строка, которую вы передаете в метод decode, является корректной шестнадцатеричной строкой. Если у вас есть дополнительные вопросы, не стесняйтесь спрашивать!

0

Вот еще один способ преобразовать шестнадцатеричную строку в строку Java:

public static String unHex(String arg) {        
    String str = "";
    for(int i = 0; i < arg.length(); i += 2) {
        String s = arg.substring(i, (i + 2));
        int decimal = Integer.parseInt(s, 16);
        str += (char) decimal;
    }       
    return str;
}

В этом коде мы проходим по каждой паре символов в шестнадцатеричной строке, преобразуем их в десятичное значение с помощью Integer.parseInt(s, 16), а затем преобразуем это значение в символ и добавляем его к результатирующей строке. В итоге мы получаем строку, представляющую исходные символы. Обратите внимание, что использование String для конкатенации может быть неэффективным для больших строк; в таких случаях лучше использовать StringBuilder.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь