杰瑞科技汇

16进制转ASCII的Java实现方法有哪些?

Java中16进制转ASCII的方法

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

16进制转ASCII的Java实现方法有哪些?-图1
(图片来源网络,侵删)

方法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
}

注意事项

  1. 确保输入的16进制字符串长度是偶数,否则会抛出异常
  2. 处理无效字符时可以根据需求调整(如跳过、替换或抛出异常)
  3. 对于非ASCII字符(如中文),需要考虑使用UTF-8等其他编码方式
  4. 如果处理大量数据,考虑使用StringBuilder提高性能

方法可以根据你的具体需求进行选择和调整。

16进制转ASCII的Java实现方法有哪些?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇