android - 从字节数组中获取所有数据包(uint)
问题描述
我正在研究一个 BLE 项目我正在获取以下数据(在扫描 BLE 设备时以字节数组形式)作为广告数据 0x02011A09094F6E65506C757332020AF9 您可以在屏幕截图中看到三个数据包,谁能帮助我如何通过 java 代码获取所有三个数据包.
解决方案
你可以试试这个:
public SparseArray<byte[]> parseAdvertisingData(byte[] rawData) {
final SparseArray<byte[]> parsedData = new SparseArray<>();
for (int index = 0; index < rawData.length; ) {
final byte dataLength = rawData[index++];
if (dataLength == 0) {
break;
}
final int dataType = rawData[index];
if (dataType == 0) {
break;
}
byte[] data = Arrays.copyOfRange(rawData, index + 1, index + dataLength);
parsedData.put(dataType, data);
index += dataLength;
}
return parsedData;
}
这是一个简单的例子:
final byte[] rawData = Utils.parseHexBinary("02011A09094F6E65506C757332020AF9");
final SparseArray<byte[]> parsed = parseAdvertisingData(rawData);
for (int i = 0; i < parsed.size(); i++) {
final int type = parsed.keyAt(i);
final byte[] data = parsed.valueAt(i);
Log.d(TAG, String.format("type: 0x%02x, value: 0x%s", type,
new BigInteger(1, data).toString(16)));
}
结果:
type: 0x01, value: 0x1a
type: 0x09, value: 0x4f6e65506c757332
type: 0x0a, value: 0xf9
推荐阅读
- anaconda - 如何在 Windows 中杀死蟒蛇?
- flutter - 将文本添加到自定义按钮
- swift - 如何在不同类中使用 UIAlert 获取文本字段值?迅速
- java - Maven 编译器插件中“fork”和“executable”选项的用途是什么?
- node.js - 后端的 ExpressJS res.download() + 前端的 fetch
- html - 使用 CSS 根据屏幕大小制作一个 HTML 表格的项目是方形的?
- office-ui-fabric - FluentUI DetailsList 标头下拉
- swift - Tableview 不会完全滚动到底部
- c# - 在gridview中显示数据的SQL查询
- javascript - 谁能告诉我这个javascript函数是如何工作的?