Java中16进制转ASCII的方法
在Java中,将16进制字符串转换为ASCII字符有几种常见方法,以下是几种实现方式:

方法1:使用BigInteger和String.format
public static String hexToAscii(String hex) {
StringBuilder ascii = new StringBuilder();
for (int i = 0; i < hex.length(); i += 2) {
String hexStr = hex.substring(i, i + 2);
int decimal = Integer.parseInt(hexStr, 16);
ascii.append((char) decimal);
}
return ascii.toString();
}
方法2:使用字节转换
public static String hexToAscii(String hex) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hex.length(); i += 2) {
String byteStr = hex.substring(i, i + 2);
int decimal = Integer.parseInt(byteStr, 16);
sb.append((char) decimal);
}
return sb.toString();
}
方法3:使用Apache Commons Codec库
如果你可以使用第三方库,Apache Commons Codec提供了更简洁的方法:
import org.apache.commons.codec.binary.Hex;
public static String hexToAscii(String hex) {
byte[] bytes = Hex.decodeHex(hex.toCharArray());
return new String(bytes);
}
方法4:处理奇数长度和无效字符的健壮版本
public static String hexToAscii(String hex) {
if (hex == null || hex.isEmpty()) {
return "";
}
// 处理奇数长度的情况
if (hex.length() % 2 != 0) {
hex = "0" + hex;
}
StringBuilder sb = new StringBuilder();
try {
for (int i = 0; i < hex.length(); i += 2) {
String hexStr = hex.substring(i, i + 2);
int decimal = Integer.parseInt(hexStr, 16);
// 检查是否是可打印ASCII字符
if (decimal >= 32 && decimal <= 126) {
sb.append((char) decimal);
} else {
sb.append("?"); // 用问号替换不可打印字符
}
}
} catch (NumberFormatException e) {
System.err.println("无效的16进制字符串: " + hex);
return "";
}
return sb.toString();
}
使用示例
public static void main(String[] args) {
String hexString = "48656C6C6F20576F726C64"; // "Hello World"的16进制表示
String asciiString = hexToAscii(hexString);
System.out.println(asciiString); // 输出: Hello World
}
注意事项
- 确保输入的16进制字符串长度是偶数,否则会抛出异常
- 处理无效字符时可以根据需求调整(如跳过、替换或抛出异常)
- 对于非ASCII字符(如中文),需要考虑使用UTF-8等其他编码方式
- 如果处理大量数据,考虑使用StringBuilder提高性能
方法可以根据你的具体需求进行选择和调整。

