2011-01-24 13 views
0

私は次の六角プレゼンテーションが含まれている文字列を持っている: 「5F E8 D0 7bはC0のF7 54 07 FB E4 20のF5 B8 10 67 A9」印刷できない文字や文字列を16進数に変換するには?

あなたは、これは単なる進であることを理解し、私はこの六角プレゼンテーションを取得する必要がありますStringから。文字列は次のようになります。 "ED> @@ 2.W.W'KJ%z_ {T g"

したがって、 "ED> @@ 2.W.W'KJ%z_ {T g "hex presentation" 5f e8 d0 7b c0 f7 54 07 fb e4 20 f5 b8 10 67 a9 "?これは印刷できない文字なので、私はこれを使用できません:

 
    public static String stringToHex(String arg) { 
     return String.format("%x", new BigInteger(arg.getBytes())); 
    } 
結果:-10404282104042104042104042104042104042c7eea21040428189104042104042f5です。 また、これは私に奇妙な何かを返します:
 
System.out.println(String.format("%h", Integer.toHexString(buff.charAt(0)))); 
結果:6d1。

このコードは時々動作します。データはsocket(Stringとして、そしてこのAuth Challengeだけが16進数として多くの回答を得る必要があるためStringとして)から来ます。

+0

これは何を与えるのでしょうか? 'System.out.println(Integer.toHexString(buff.charAt(0))); –

+0

あなたの質問は不明です。文字 "5"、続いて "f"、スペースの後に "e"などの文字列を持っていますか、またはバイト0x5F、0xE8などを含む文字列を持っていますか? – dty

+0

文字列に印字不能文字があります。 16進数の上位は、文字列の16進表現です。 – purple

答えて

4

これが正解です:Integer.toHexString()

public static String toHexString(byte[] bytes) { 
    StringBuilder out = new StringBuilder(); 
    for (byte b: bytes) { 
     out.append(String.format("%02X", b) + " "); 
    } 
    return out.toString(); 
} 

ソリューションは、次のような理由で間違っている:

  1. それはバイトが0x01に先行ゼロを追加していません - 0x0Fの
  2. それが印刷さ2の補数表記の負の整数としての0x80 - 0xFFバイト
関連する問題