2012-04-26 93 views
2

可能重複:
Convert a string representation of a hex dump to a byte array using Java?如何字節串轉換爲可讀的字符串

例如我得到一個字節串如下: 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d38223f3e3c53 6f6170456e763a456e76656c6f706520786d6c6e733a536f6170456e763d22687474703a2f2f7363 68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f223e3c536f617045 6e763a48656164657220786d6c6e733a7773613d22687474703a2f2f7777772e77332e6f72672f32 3030352f30382f61646472657373696e67223e3c7773613a46726f6d3e3c7773613a416464726573 733e43484e594442473c2f7773613a416464726573733e3c2f7773613a46726f6d3e3c7773613a54 6f3e434352433c2f7773613a546f3e3c7773613a416374696f6e3e687474703a2f2f636372632e73 6572766963652e62616e6b636f6d6d2e636f6d2f6162737472616374696f6e2f61746f6d69632f74 6563686e6963616c2e506572736f6e616c4372656469745265706f7274536572762f4661756c743c 2f7773613a416374696f6e3e3c7773613a4d65737361676549443e75726e3a757569643a30303031

而且我知道下面的文字是UTF-8編碼,那麼,誰可以提供一些方法,將這些O ctets到可讀的字符串?

+1

在這裏回答:http://stackoverflow.com/questions/140131/convert-a-string-representation-of-a-hex-dump-to-a-byte-array-using-java – phatfingers 2012-04-26 04:16:07

回答

3

嘗試閱讀每兩個字符,Integer.parseInt(String,int)解析它們作爲一個底座16的整數,將它們添加到一個字節數組,以及構建String from the result

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!" 

你的串的例子,類似於XML文檔包含一條SOAP消息。

1

我認爲你需要先將它轉換成一個字節數組,然後構建字符串,查看Byte類,看看它是否有一個方法從兩個十六進制字符中獲取字節,那麼這只是一個問題遍歷每兩個字符並將它們轉換爲字節。

此鏈接可能是有用的Byte parseByte with radix

2

從SNMP4J看看這裏OctetString。這對你有幫助。

OctetString octetString = new OctetString(java.lang.String); 
octetString.toString();