如何在 Java 中将十六进制字符串转换为十进制整数

本文介绍在 java 中将蓝牙接收的十六进制字符串(如 "0e"、"15")安全、准确地转换为对应十进制整数值的实用方法,重点使用 `integer.parseint(string, 16)` 并涵盖大小写处理、异常防护与实际集成示例。

在实际开发中(例如通过蓝牙接收传感器数据),你常会收到以字节形式传输的十六进制值,如 byte[] data = {0x0e, 0x15}。你已通过 formatHexString() 将其转为 "0e15" 或 "0e 15" 等字符串格式;下一步需将其还原为可计算的十进制整数。Java 提供了简洁可靠的内置方案:Integer.parseInt(String s, int radix)。

核心方法

String hexStr = "0e"; // 小写,也可为 "0E"、"15"、"FF"
int decimal = Integer.parseInt(hexStr, 16);
System.out.println(decimal); // 输出:14

⚠️ 关键注意事项

  • radix = 16 表示按十六进制解析,自动兼容大小写字母(a–f 和 A–F 均有效);
  • 输入字符串不能含前缀(如 "0

    x0e" 或 "#15"),需先清理。若原始字符串带空格(如 "0e 15"),应先分割再逐个解析:
    String formatted = "0e 15";
    String[] hexParts = formatted.trim().split("\\s+");
    for (String hex : hexParts) {
        if (!hex.isEmpty()) {
            try {
                int value = Integer.parseInt(hex, 16);
                System.out.println("Hex '" + hex + "' → Decimal: " + value);
            } catch (NumberFormatException e) {
                System.err.println("Invalid hex string: " + hex);
            }
        }
    }
    // 输出:Hex '0e' → Decimal: 14  
    //       Hex '15' → Decimal: 21

? 与你现有代码无缝集成示例
假设你从蓝牙接收到 byte[] data,希望直接获取每个字节对应的十进制值(而非拼接后的完整十六进制串):

public static int[] bytesToDecimals(byte[] data) {
    if (data == null) return new int[0];
    int[] decimals = new int[data.length];
    for (int i = 0; i < data.length; i++) {
        decimals[i] = data[i] & 0xFF; // 直接转为无符号十进制(0–255)
    }
    return decimals;
}
// 调用:bytesToDecimals(new byte[]{(byte)0x0e, (byte)0x15}) → [14, 21]

? 总结

  • 优先使用 Integer.parseInt(hexString, 16) 进行字符串→十进制转换,简洁高效;
  • 对不可信输入务必包裹 try-catch 处理 NumberFormatException;
  • 若原始数据是 byte[],且只需单字节十进制值(如传感器单字节读数),直接 & 0xFF 比先转 hex 再 parse 更高效;
  • 避免手动实现十六进制查表逻辑(如你代码中的 DIGITS_LOWER),Java 标准库已充分优化且更可靠。