从hex64转换为base 64 String

时间:2014-09-25 13:10:56

标签: java encoding base64

我的输入十六进制是

C30A010000003602000F73B32F9ECA00E9F2F2E9

我需要将其转换为以下基本64位编码的字符串:

wwoBAAAANgIAD3OzL57KAOny8uk=

我可以在这个网站上模拟这个转换:http://www.asciitohex.com/但我似乎无法使用本网站和网络上其他地方建议的各种base64编码器实用工具在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==

有谁能建议如何让这次转型成功运作?

由于

1 个答案:

答案 0 :(得分:3)

基本上,hexString.getBytes()没有达到您的预期。它只是将字符串编码为平台默认编码中的字节序列 - 它与十六进制无关。

您需要从十六进制解码到byte[]才能开始。此外,您不需要使用另一个字符串调用String构造函数。由于您已经在使用Apache Commons Codec,因此使用Hex类进行解码是有意义的。为清晰起见,我还要分清步骤:

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