我的输入十六进制是
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==
有谁能建议如何让这次转型成功运作?
由于
答案 0 :(得分:3)
基本上,hexString.getBytes()
没有达到您的预期。它只是将字符串编码为平台默认编码中的字节序列 - 它与十六进制无关。
您需要从十六进制解码到byte[]
才能开始。此外,您不需要使用另一个字符串调用String
构造函数。由于您已经在使用Apache Commons Codec,因此使用Hex
类进行解码是有意义的。为清晰起见,我还要分清步骤:
String hexString = "C30A010000003602000F73B32F9ECA00E9F2F2E9";
byte[] rawData = Hex.decodeHex(hexString.toCharArray());
String output = Base64.encodeBase64String(rawData);