Java 16进制字符串转字符串
在Java中,将16进制字符串转换为普通字符串有几种常见方法,以下是几种实现方式:
方法1:使用Integer.parseInt和字符转换
public static String hexToString(String hex) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hex.length(); i += 2) {
String str = hex.substring(i, i + 2);
sb.append((char) Integer.parseInt(str, 16));
}
return sb.toString();
}
方法2:使用BigInteger
import java.math.BigInteger;
public static String hexToString(String hex) {
// 去除可能的0x前缀
if (hex.startsWith("0x") || hex.startsWith("0X")) {
hex = hex.substring(2);
}
// 确保长度为偶数
if (hex.length() % 2 != 0) {
hex = "0" + hex;
}
BigInteger bigInt = new BigInteger(hex, 16);
return new String(bigInt.toByteArray());
}
方法3:使用Apache Commons Codec库
如果项目中可以使用第三方库,这是最简单的方法:
import org.apache.commons.codec.binary.Hex;
public static String hexToString(String hex) {
byte[] bytes = Hex.decodeHex(hex.toCharArray());
return new String(bytes);
}
方法4:处理UTF-8编码的16进制字符串
如果16进制字符串表示的是UTF-8编码的字节,可以这样转换:
import java.nio.charset.StandardCharsets;
public static String hexToString(String hex) {
byte[] bytes = new byte[hex.length() / 2];
for (int i = 0; i < bytes.length; i++) {
int index = i * 2;
int v = Integer.parseInt(hex.substring(index, index + 2), 16);
bytes[i] = (byte) v;
}
return new String(bytes, StandardCharsets.UTF_8);
}
使用示例
public static void main(String[] args) {
String hexString = "48656C6C6F20576F726C64"; // "Hello World"的16进制表示
System.out.println(hexToString(hexString)); // 输出: Hello World
String utf8Hex = "E4BDA0E5A5BD"; // "你好"的UTF-8 16进制表示
System.out.println(hexToString(utf8Hex)); // 输出: 你好
}
注意事项
- 确保输入的16进制字符串长度是偶数,每个字符对表示一个字节
- 如果16进制字符串有"0x"前缀,需要先去除
- 根据实际编码(ASCII, UTF-8等)选择合适的转换方法
- 对于大字符串,考虑使用StringBuilder提高性能
方法可以根据具体需求选择使用,方法3最为简洁但需要引入第三方库。
