3

重複の可能性:
Javaを使用して16進ダンプの文字列表現をバイト配列に変換しますか?

3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d38223f3e3c53 6f6170456e763a456e76656c6f706520786d6c6e733a536f6170456e763d22687474703a2f2f7363 68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f223e3c536f617045 6e763a48656164657220786d6c6e733a7773613d22687474703a2f2f7777772e77332e6f72672f32 3030352f30382f61646472657373696e67223e3c7773613a46726f6d3e3c7773613a416464726573 733e43484e594442473c2f7773613a416464726573733e3c2f7773613a46726f6d3e3c7773613a54 6f3e434352433c2f7773613a546f3e3c7773613a416374696f6e3e687474703a2f2f636372632e73 6572766963652e62616e6b636f6d6d2e636f6d2f6162737472616374696f6e2f61746f6d69632f74 6563686e6963616c2e506572736f6e616c4372656469745265706f7274536572762f4661756c743c 2f7773613a416374696f6e3e3c7773613a4d65737361676549443e75726e3a757569643a30303031:たとえば、私は次のようにオクテット文字列を取得します

そして、基礎となるテキストがUTF-8エンコーディングであることを知っているので、これらのオクテットを読み取り可能な文字列に変換するためのいくつかのメソッドを提供できるのは誰ですか?

4

3 に答える 3

5

それぞれの2文字を読み取り、それらを基数16の整数として解析し、Integer.parseInt(String,int)それらをバイト配列に追加してString、結果からaを作成してみてください。

public static String fromHex(String s) throws UnsupportedEncodingException {
  byte bs[] = new byte[s.length() / 2];
  for (int i=0; i<s.length(); i+=2) {
    bs[i/2] = (byte) Integer.parseInt(s.substring(i, i+2), 16);
  }
  return new String(bs, "UTF8");
}

fromHex("48656c6c6f2c20576f726c6421"); // => "Hello, World!"

文字列の例は、SOAPメッセージを含むXMLドキュメントのように見えます。

于 2012-04-26T04:09:08.843 に答える
2

snmp4jのOctetStringをご覧ください。これはあなたに役立つことがあります。

OctetString octetString = new OctetString(java.lang.String);
octetString.toString();
于 2012-04-26T04:02:16.783 に答える
1

最初にバイト配列に変換してから文字列を作成し、Byteクラスを調べて、2つの16進文字からバイトを取得するメソッドがあるかどうかを確認する必要があると思います。 2つの文字とそれらをバイトに変換します。

このリンクは、基数を使用したByteparseByteに役立つ場合があります

于 2012-04-26T03:48:43.060 に答える