-4

16進数を含む文字列がありますが、それらをテキストにデコードして文字列に変換したい

文字列が「FF505000010000000A00015634」の場合、16進数ですが、\ xFF \x50...などにするにはどうすればよいですか。

ここで私を助けてください

4

3 に答える 3

3

試す

    String s = "FF505000010000000A00015634";
    s = s.replaceAll(" +", "");
    byte[] bytes =  new BigInteger(s, 16).toByteArray();
于 2013-01-07T09:28:59.227 に答える
1

テキストを16進文字列としてテキストに変換する簡単な方法は、BigIntegerを使用することです。

String s = "Hello world!";
String hex = new BigInteger(s.getBytes(StandardCharsets.US_ASCII)).toString(16);

hex = hex.replaceAll("\\s+", ""); // remove any whitespaces.
String s2 = new String(new BigInteger(hex, 16).toByteArray(), StandardCharsets.US_ASCII);
System.out.printf("\"%s\" as hex is %s, converted back is \"%s\"%n", s, hex, s2);

プリント

"こんにちは世界!" 16進数は48656c6c6f20776f726c6421であるため、変換された値は「Helloworld!」です。

于 2013-01-07T09:31:50.297 に答える
0

これは機能するはずです。基本的に2文字ごとに取得し、それを。に解析します。intこれは、として解釈することもできますchar。それから、別のデコードされたを構築しますString

String s = "FF505000010000000A00015634";
if (s.length() % 2 != 0) {
    //odd amount, so wrong string. Throw exception.
}
String decoded = "";
int j = 0;
while (j < s.length()) {
    String sub = s.substring(j, j + 2);
    int i = Integer.parseInt(sub, 16);
    decoded += (char)i;
    j += 2;
}
System.out.println(decoded);

私の出力はかなりランダムでしたが、あなたのテストストリングはそれほど良くなかったと思います。

の場合Hello world!、これを使用します。

String s = "48 65 6C 6C 6F 20 57 6F 72 6C 64 21";
s = s.replaceAll(" ", "");

では、実際に何が起こるのでしょうか。

  1. 2文字ごとに1文字として解釈する必要があります。
  2. したがってString、2文字に分割します。
  3. 2文字ごとに実際のint値に変換し、実際の変換を可能にします。
  4. 16進数からASCIIデコードされた文字まで、すべてを新しいデコードされた文字に追加しますString
  5. ヘクスにすべての文字が入るまで繰り返しますString
于 2013-01-07T09:23:57.480 に答える