51

ロギングの目的で、ログをバイト配列に変換してから 16 進文字列に変換しています。Java String に戻したいのですが、それができません。

ログ ファイルの 16 進文字列は次のようになります。

fd00000aa8660b5b010006acdc0100000101000100010000

どうすればこれをデコードできますか?

4

6 に答える 6

67

HexApache Commons での使用:

String hexString = "fd00000aa8660b5b010006acdc0100000101000100010000";    
byte[] bytes = Hex.decodeHex(hexString.toCharArray());
System.out.println(new String(bytes, "UTF-8"));
于 2012-12-21T13:30:13.307 に答える
34
byte[] bytes = javax.xml.bind.DatatypeConverter.parseHexBinary(hexString);
String result= new String(bytes, encoding);
于 2015-02-19T15:53:44.083 に答える
13

からString (hex)まで行くことができます。16 進文字列の先頭にスペースなどがないことを確認してくださいbyte arrayString 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);
于 2016-04-05T04:35:06.567 に答える
10

まずデータを読み込み、次にそれをバイト配列に変換します。

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

次に、Stringコンストラクターを使用します。

new String(byte[] bytes) 

または、文字セットがシステムデフォルトでない場合は、次のようになります。

new String(byte[] bytes, String charsetName) 
于 2012-12-21T13:21:14.027 に答える
6

次のコードを試してください。

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 に変換するには、decode メソッドによって返された byte[] を使用して新しい String を作成するだけです。

于 2015-02-02T06:16:20.153 に答える
5

16 進文字列を Java 文字列に変換するもう 1 つの方法:

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;
}
于 2016-04-01T13:35:01.253 に答える