如何在Java中将'0xFF'格式的十六进制字符串转换为Base64编码字符串?
解决方案
要实现从0xFF...格式的十六进制字符串到Base64编码的转换,核心是先把十六进制字符串解析为二进制字节数组,再对字节数组做Base64编码,而不是直接编码字符串本身。以下是两种可行的实现方式:
方式一:使用JDK自带工具(Java 8+)
JDK内置的javax.xml.bind.DatatypeConverter类可以直接解析十六进制字符串,无需引入第三方库:
import java.util.Base64; import javax.xml.bind.DatatypeConverter; public class HexToBase64 { public static void main(String[] args) { String hexString = "0xFFA1B2C3"; // 你的SQL Server返回的十六进制字符串 // 1. 移除开头的"0x"前缀 String pureHex = hexString.substring(2); // 2. 将纯十六进制字符串解析为二进制字节数组 byte[] binaryData = DatatypeConverter.parseHexBinary(pureHex); // 3. 对字节数组执行Base64编码 String base64String = Base64.getEncoder().encodeToString(binaryData); System.out.println(base64String); // 输出最终的Base64结果 } }
方式二:使用Apache Commons Codec(第三方库)
如果项目已依赖Apache Commons Codec,或者更偏好通用工具类,可采用以下实现:
- 先引入Maven依赖(示例):
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> </dependency>
- 转换代码:
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Hex; public class HexToBase64 { public static void main(String[] args) { String hexString = "0xFFA1B2C3"; // 移除"0x"前缀 String pureHex = hexString.substring(2); // 解析十六进制字符串为字节数组 byte[] binaryData = Hex.decodeHex(pureHex.toCharArray()); // 生成Base64编码字符串 String base64String = Base64.encodeBase64String(binaryData); System.out.println(base64String); } }
原有代码的问题说明
你之前写的Base64.getEncoder().encodeToString(HexString.getBytes()),是把0xFF...这个字符串本身的字符编码(比如UTF-8)转成字节数组再做Base64编码——相当于把"0xFFA1B2C3"当成普通文本处理,完全没有解析十六进制对应的二进制数据,所以结果不符合需求。
内容的提问来源于stack exchange,提问作者Alex Stump
相关产品推荐
相关产品推荐

