
本文详解如何将蓝牙接收的十六进制字符串(如 "0e"、"15")准确、健壮地转换为对应的十进制整数,并涵盖大小写处理、异常防护及实际应用示例。
在 Java 中,将十六进制字符串(如 "0e" 或 "15")转换为十进制整数最直接、标准的方式是使用 Integer.parseInt(String s, int radix) 方法,并指定进制基数为 16:
String hexStr = "0e"; int decimal = Integer.parseInt(hexStr, 16); // 结果为 14
该方法自动支持大小写混合的十六进制字符('a'–'f' 和 'A'–'F'),无需手动映射字符数组(如你代码中的 DIGITS_LOWER/DIGITS_UPPER)。它底层已做了充分验证与优化,是 JDK 推荐的标准方案。
⚠️ 注意事项:
- 输入字符串不能为 null,且必须是非空、仅含合法十六进制字符(可选前缀 "0x" 或 "0X" 不被默认支持 —— 需提前去除);
- 若字符串包含非法字符(如 "0g")、为空或超出 int 范围(如 "FFFFFFFF" 在有符号 int 中会溢出为 -1),将抛出 NumberFormatException;
- 对于可能越界的长十六进制值(如 "123456789ABCDEF"),应改用 Long.parseLong(hexStr, 16) 或 BigInteger(new BigInteger(hexStr, 16))。
✅ 推荐健壮封装(含空值与异常处理):
立即学习“Java免费学习笔记(深入)”;
public static int hexToDecimal(String hex) {
if (hex == null || hex.trim().isEmpty()) {
throw new IllegalArgumentException("Hex string cannot be null or empty");
}
try {
return Integer.parseInt(hex.trim(), 16);
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex string: '" + hex + "'", e);
}
}
// 使用示例
System.out.println(hexToDecimal("0e")); // 14
System.out.println(hexToDecimal("15")); // 21
System.out.println(hexToDecimal("FF")); // 255
System.out.println(hexToDecimal("aB")); // 171(大小写混合也支持)结合你原有蓝牙数据处理逻辑:若 formatHexString(...) 输出的是类似 "0e15" 的连续十六进制字符串,需先按字节拆分(如每两个字符一组),再逐段解析:
String fullHex = formatHexString(receivedBytes); // e.g., "0e15"
for (int i = 0; i < fullHex.length(); i += 2) {
String byteHex = fullHex.substring(i, Math.min(i + 2, fullHex.length()));
int value = hexToDecimal(byteHex);
System.out.println("Byte " + (i/2) + ": 0x" + byteHex + " → " + value);
}总结:避免自行实现进制转换逻辑;优先使用 Integer.parseInt(str, 16),辅以空值校验与异常处理,即可安全、高效完成十六进制到十进制的转换任务。










