Подтвердить что ты не робот

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

Для целей ведения журнала некоторые другие ребята конвертируют журналы в байтовый массив, а затем в шестую строку. Но я хочу вернуть его в java String, но не могу этого сделать,

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

fd00000aa8660b5b010006acdc0100000101000100010000

Может ли кто-нибудь PLZ помочь его декодировать?

Спасибо заранее...

4b9b3361

Ответ 1

Используя Hex в Apache Commons:

String hexString = "fd00000aa8660b5b010006acdc0100000101000100010000";    
byte[] bytes = Hex.decodeHex(hexString.toCharArray());
System.out.println(new String(bytes, "UTF-8"));

Ответ 2

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

Ответ 3

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

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

а затем используйте конструктор String:

new String(byte[] bytes) 

или если кодировка не является системной, а затем:

new String(byte[] bytes, String charsetName) 

Ответ 4

Вы можете перейти от String (hex) до byte array в String as 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);

Ответ 5

Попробуйте использовать следующий код:

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

}

Для преобразования в String просто создайте новую строку с байтом [], возвращаемым методом декодирования.

Ответ 6

Еще один способ преобразования шестнадцатеричной строки в строку 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 = str + (char) decimal;
    }       
    return str;
}