Java中如何将元素为单字节十六进制值的字符串数组转换为byte数组
Java端十六进制字符串数组转byte数组实现
直接给可直接复用的工具方法:
public byte[] hexStrArrToByteArray(String[] hexStrArr) { int arrLen = hexStrArr.length; byte[] resultBytes = new byte[arrLen]; for (int i = 0; i < arrLen; i++) { // radix指定为16,按十六进制规则解析字符串为int后强转byte resultBytes[i] = (byte) Integer.parseInt(hexStrArr[i], 16); } return resultBytes; }
你示例中的输入new String[]{"52", "0"}调用该方法后,得到的byte数组就是目标值[82, 0],和RN侧原始Uint8Array完全一致,不会丢失空字节。
如果需要兼容非法输入、空输入的场景,可以补充异常处理逻辑,参考实现如下:
public byte[] hexStrArrToByteArray(String[] hexStrArr) { // 空输入直接返回空数组 if (hexStrArr == null || hexStrArr.length == 0) { return new byte[0]; } int arrLen = hexStrArr.length; byte[] resultBytes = new byte[arrLen]; for (int i = 0; i < arrLen; i++) { try { // trim处理掉字符串前后可能存在的空格 String hex = hexStrArr[i].trim(); resultBytes[i] = (byte) Integer.parseInt(hex, 16); } catch (NumberFormatException e) { // 非法十六进制格式可按业务需求自定义处理,此处示例默认填0 resultBytes[i] = 0; } } return resultBytes; }
注意事项
- 该方法天然兼容大小写十六进制字符,输入
"a"和"A"都会被解析为十进制10对应的byte值 - 你当前场景是每个字符串仅对应单字节十六进制,无需额外处理多字节拼接逻辑,直接逐个解析即可
- 该方案完全避开了RN与Native交互时字符串空字符被截断的问题,是BLE二进制数据传输场景的通用解决方案
内容的提问来源于stack exchange,提问作者d36williams
相关产品推荐
相关产品推荐

