2014-09-25 72 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