2011-01-24 38 views
0

我有字符串包含下一六角介绍: “5F E8 D0 7B C0 F7 54 07 FB E4 20 F5 B8 10 67 A9”如何将非打印字符或字符串转换为十六进制?

你明白,这仅仅是十六进制,我需要得到这个十六进制演示来自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。

而且这段代码有时会起作用。数据来自套接字(因为我需要以String的形式获得很多答案,并且只有这个Auth Challenge是十六进制的)。

+0

这是什么给予​​的? `System.out.println(Integer.toHexString(buff.charAt(0)));` – 2011-01-24 22:12:28

回答

4

这是正确的解决方案:

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

Integer.toHexString()解决方案是错误的,原因如下:

  1. 它不添加前导零字节0×01 - 为0x0F
  2. 它打印字节0x80-0xFF作为2的补码表示中的负整数
相关问题