2014-09-25 121 views
0

我輸入十六進制是轉換爲基礎64字符串

C30A010000003602000F73B32F9ECA00E9F2F2E9 

我需要將其轉換爲以下基本64編碼字符串:

wwoBAAAANgIAD3OzL57KAOny8uk= 

我可以模擬在這個網站這一轉變: http://www.asciitohex.com/,但我似乎無法使用本網站和網絡上其他地方建議的各種base64編碼器Util在Java中使用此轉換。例如,

import org.apache.commons.codec.DecoderException; 
import org.apache.commons.codec.binary.Base64; 

public class Test { 

    public static void main(final String args[]) throws DecoderException { 

    String hexString = "C30A010000003602000F73B32F9ECA00E9F2F2E9"; 

    String output = new String(Base64.encodeBase64String(hexString.getBytes())); 

    System.out.println(output); 

} 

但是輸出因爲這是不同的東西:

QzMwQTAxMDAwMDAwMzYwMjAwMEY3M0IzMkY5RUNBMDBFOUYyRjJFOQ== 

任何人都可以提出如何得到這個轉型成功的工作?

感謝

回答

3

基本上hexString.getBytes()不會做你希望它是什麼。它只是將字符串編碼爲平臺默認編碼中的字節序列 - 與十六進制無關。

您需要解碼從十六進制到byte[]開始。另外,您不需要用另一個字符串調用String構造函數。由於您已經在使用Apache Commons Codec,因此使用Hex類進行解碼很有意義。我也將步驟清晰分開:

String hexString = "C30A010000003602000F73B32F9ECA00E9F2F2E9"; 
byte[] rawData = Hex.decodeHex(hexString.toCharArray()); 
String output = Base64.encodeBase64String(rawData); 
+0

謝謝 - 做到了! – 2014-09-25 13:28:15