杰瑞科技汇

Java 16进制字符串如何转字符串?

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)); // 输出: 你好
}

注意事项

  1. 确保输入的16进制字符串长度是偶数,每个字符对表示一个字节
  2. 如果16进制字符串有"0x"前缀,需要先去除
  3. 根据实际编码(ASCII, UTF-8等)选择合适的转换方法
  4. 对于大字符串,考虑使用StringBuilder提高性能

方法可以根据具体需求选择使用,方法3最为简洁但需要引入第三方库。

分享:
扫描分享到社交APP
上一篇
下一篇