首页 > 解决方案 > 从字节数组中获取所有数据包(uint)

问题描述

我正在研究一个 BLE 项目我正在获取以下数据(在扫描 BLE 设备时以字节数组形式)作为广告数据 0x02011A09094F6E65506C757332020AF9 您可以在屏幕截图中看到三个数据包,谁能帮助我如何通过 java 代码获取所有三个数据包.

在此处输入图像描述

标签: androidbluetoothbluetooth-lowenergytlv

解决方案


你可以试试这个:

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

推荐阅读