Java 十六进制数组转字符串
在 Java 中,将十六进制字节数组转换为字符串有几种常见方法,以下是几种实现方式:

方法1:使用 Integer.toHexString()
public static String hexArrayToString(byte[] hexArray) {
StringBuilder sb = new StringBuilder();
for (byte b : hexArray) {
sb.append(String.format("%02X", b));
}
return sb.toString();
}
方法2:使用 BigInteger
public static String hexArrayToString(byte[] hexArray) {
BigInteger bigInt = new BigInteger(1, hexArray);
return bigInt.toString(16);
}
方法3:使用 Apache Commons Codec (推荐)
如果项目中可以使用第三方库,Apache Commons Codec 提供了最简洁的方法:
import org.apache.commons.codec.binary.Hex;
public static String hexArrayToString(byte[] hexArray) {
return Hex.encodeHexString(hexArray);
}
方法4:处理带0x前缀的数组
如果数组中的每个元素都是带"0x"前缀的十六进制字符串:
public static String hexArrayToString(String[] hexArray) {
StringBuilder sb = new StringBuilder();
for (String hex : hexArray) {
// 去掉0x前缀(如果有)
String cleanHex = hex.startsWith("0x") ? hex.substring(2) : hex;
sb.append(cleanHex);
}
return sb.toString();
}
使用示例
public static void main(String[] args) {
byte[] bytes = {0x48, 0x65, 0x6C, 0x6C, 0x6F}; // "Hello"的十六进制表示
// 方法1
System.out.println(hexArrayToString(bytes)); // 输出: 48656C6C6F
// 方法3 (需要添加commons-codec依赖)
// System.out.println(Hex.encodeHexString(bytes));
}
注意事项
- 对于字节数组,方法1和方法2都能正确处理,但方法1更直观可控
- 如果需要小写输出,可以将
%02X改为%02x - 对于大数组,方法1的性能通常更好
- 方法2会自动处理前导零,但可能不适合某些特定场景
选择哪种方法取决于你的具体需求和项目环境,如果可以,推荐使用Apache Commons Codec的方法,因为它简洁且经过充分测试。

