如何获取字节数组的第一个和第二个元素?
获取字节数组的第一个和第二个元素
你完全不需要通过Arrays.toString()生成的字符串去提取元素——直接操作原始的byte[]数组才是最直接、高效的方式,而且能避免解析字符串带来的额外麻烦和错误风险。
具体操作步骤:
- 先做安全校验:在访问数组元素前,一定要确保数组不为
null,并且长度至少有2个元素,防止出现NullPointerException或ArrayIndexOutOfBoundsException。 - 通过索引直接访问:Java数组的索引从0开始,所以第一个元素是
manufacturerData[0],第二个元素是manufacturerData[1]。 - 处理字节符号问题(可选):如果你的设备返回的是无符号字节值,记得和
0xFF做按位与操作,把有符号的byte转成无符号的int(Java的byte是有符号类型,范围是-128到127)。
完整代码示例:
ScanRecord scanRecord = result.getScanRecord(); assert scanRecord != null; byte[] manufacturerData = scanRecord.getManufacturerSpecificData(0x0590); // 安全校验,避免数组为空或长度不足的情况 if (manufacturerData != null && manufacturerData.length >= 2) { // 获取第一个元素(有符号byte类型) byte firstByte = manufacturerData[0]; // 转成无符号int值(如果需要) int firstUnsignedValue = firstByte & 0xFF; // 获取第二个元素(有符号byte类型) byte secondByte = manufacturerData[1]; int secondUnsignedValue = secondByte & 0xFF; // 后续按需使用这些值即可 System.out.println("第一个元素(有符号byte):" + firstByte); System.out.println("第一个元素(无符号int):" + firstUnsignedValue); System.out.println("第二个元素(有符号byte):" + secondByte); System.out.println("第二个元素(无符号int):" + secondUnsignedValue); } else { // 处理数据异常的情况 System.out.println("制造商数据为空或长度不足2个元素"); }
为什么不推荐解析Arrays.toString()的结果?
Arrays.toString(manufacturerData)生成的是类似[10, -5]这样的格式化字符串,如果你要从中提取数值,需要做字符串切割、转义处理,不仅代码繁琐,还容易因为元素符号、格式变化导致解析错误,完全没必要多此一举。
内容的提问来源于stack exchange,提问作者diamond
相关产品推荐
相关产品推荐

