Java中如何将十六进制字符串转换为十进制数值?
将十六进制字符串转换为十进制数值的解决方案
你的formatHexString方法会生成两种格式的十六进制字符串:
- 无空格格式:例如输入
0x0e和0x15两个字节,生成字符串"0e15" - 带空格格式:生成字符串
"0e 15"
以下是针对这两种格式的转换实现,可将每个十六进制值单独转为十进制,也可将整个字符串作为一个十六进制数转换:
1. 拆分多个十六进制值为十进制列表
适合把蓝牙接收的两个独立十六进制值分别转成十进制显示:
import java.util.ArrayList; import java.util.List; public class HexConverter { // 把十六进制字符串(带/不带空格)转换为十进制整数列表 public static List<Integer> hexStringToDecimalList(String hexStr) { List<Integer> decimalList = new ArrayList<>(); if (hexStr == null || hexStr.isEmpty()) { return decimalList; } String[] hexParts; // 处理带空格的情况,分割为单个十六进制片段 if (hexStr.contains(" ")) { hexParts = hexStr.trim().split("\\s+"); } else { // 无空格时,按每两位分割(对应原始byte的两位十六进制表示) hexParts = new String[hexStr.length() / 2]; for (int i = 0; i < hexStr.length(); i += 2) { hexParts[i / 2] = hexStr.substring(i, i + 2); } } // 逐个转换为十进制 for (String part : hexParts) { try { // Integer.parseInt支持大小写十六进制字符,适配你的代码输出 int decimal = Integer.parseInt(part, 16); decimalList.add(decimal); } catch (NumberFormatException e) { System.err.println("无效的十六进制值:" + part); } } return decimalList; } }
使用示例:
- 输入
"0e15",返回列表[14, 21](0e对应十进制14,15对应21) - 输入
"0e 15",返回结果一致
2. 将整个十六进制字符串转为单个十进制值
如果需要把两个十六进制值组合成一个16位整数显示(例如0e15作为整体转成十进制):
public static int hexStringToSingleDecimal(String hexStr) { if (hexStr == null || hexStr.isEmpty()) { return 0; // 可根据业务需求调整默认值 } try { // 先移除所有空格,再统一转换 return Integer.parseInt(hexStr.replaceAll("\\s", ""), 16); } catch (NumberFormatException e) { System.err.println("无效的十六进制字符串:" + hexStr); return 0; } }
使用示例:
- 输入
"0e15"或"0e 15",均返回3605
内容的提问来源于stack exchange,提问作者Sifu Duck
相关产品推荐
相关产品推荐

