BLE 广播 rawBytes 解析说明

📅 2026/6/23 12:31:49
BLE 广播 rawBytes 解析说明
在 BLE 扫描结果中rawBytes表示扫描到的原始广播数据或扫描响应数据。这些数据通常由多个AD Structure组成每个 AD Structure 都按照固定格式排列。一、rawBytes 的结构BLE 广播数据的基本结构如下Length | AD Type | AD Data其中字段长度说明Length1 字节表示后面还有多少字节不包含 Length 自身AD Type1 字节表示当前这段数据的类型AD DataLength - 1 字节具体数据解析方式由 AD Type 决定需要注意Length 包含 AD Type 和 AD Data Length 不包含 Length 自己 AD Data 的长度 Length - 1例如02 01 06解析为02 Length表示后面有 2 个字节 01 AD Type 06 AD Data所以整个 AD Structure 实际长度是1 Length 3 字节解析 rawBytes 时就是不断重复读取读取 Length 读取 AD Type 读取 Length - 1 字节的 AD Data 根据 AD Type 解析 AD Data 继续读取下一段 AD Structure如果遇到00表示Length 0通常可以认为后面没有有效广播数据了。二、常用 AD Type 及 Data 解析方式AD Type名称AD Data 解析方式0x01Flags1 字节按 bit 位解析0x02Incomplete List of 16-bit Service UUIDs每 2 字节一个 UUID小端序0x03Complete List of 16-bit Service UUIDs每 2 字节一个 UUID小端序0x06Incomplete List of 128-bit Service UUIDs每 16 字节一个 UUID0x07Complete List of 128-bit Service UUIDs每 16 字节一个 UUID0x08Shortened Local Name按 UTF-8 字符串解析0x09Complete Local Name按 UTF-8 字符串解析0x0ATx Power Level1 字节有符号整数单位 dBm0x16Service Data - 16-bit UUID前 2 字节是 16-bit UUID小端序后面是 Service Data0x19Appearance2 字节小端序0xFFManufacturer Specific Data前 2 字节是 Company ID小端序后面是厂商自定义数据1. Flags0x01示例02 01 06解析02 Length 01 AD Type表示 Flags 06 AD Data0x06转成二进制0000 0110常见 bit 位含义位值含义bit00x01LE Limited Discoverable Modebit10x02LE General Discoverable Modebit20x04BR/EDR Not Supportedbit30x08Simultaneous LE and BR/EDR to Same Device Capable, Controllerbit40x10Simultaneous LE and BR/EDR to Same Device Capable, Host所以0x06 0x02 0x04表示LE General Discoverable Mode BR/EDR Not Supported2. 16-bit Service UUID0x02 / 0x03示例03 02 0F 18解析03 Length 02 AD Type表示 Incomplete List of 16-bit Service UUIDs 0F 18 AD Data16-bit UUID 使用小端序0F 18 0x180F通常可以补全成 128-bit UUID0000180f-0000-1000-8000-00805f9b34fb如果 AD Data 中有多个 UUID例如05 03 0F 18 0A 18解析为0F 18 0x180F 0A 18 0x180A3. Local Name0x08 / 0x09示例08 09 44 65 76 69 63 65 31解析08 Length 09 AD Type表示 Complete Local Name 44 65 76 69 63 65 31 AD DataAD Data 按 UTF-8 字符串解析Device1其中44 D 65 e 76 v 69 i 63 c 65 e 31 14. Tx Power Level0x0A示例02 0A EC解析02 Length 0A AD Type表示 Tx Power Level EC AD DataTx Power 是 1 字节有符号整数。0xEC -20所以表示Tx Power -20 dBm5. Service Data - 16-bit UUID0x16示例05 16 0F 18 64 00解析05 Length 16 AD Type表示 Service Data - 16-bit UUID 0F 18 16-bit UUID小端序 64 00 Service Data其中0F 18 0x180F后面的64 00是该 Service 对应的数据具体含义需要根据对应 Service 定义或厂商协议解析。6. Appearance0x19示例03 19 C1 03解析03 Length 19 AD Type表示 Appearance C1 03 AD DataAppearance 是 2 字节小端序C1 03 0x03C1常见 Appearance 示例值含义0x0000Unknown0x0040Generic Phone0x0080Generic Computer0x03C0Generic Human Interface Device0x03C1Keyboard0x03C2Mouse7. Manufacturer Specific Data0xFF示例08 FF 4C 00 01 02 03 04 05解析08 Length FF AD Type表示 Manufacturer Specific Data 4C 00 Company ID 01 02 03 04 05 Manufacturer DataCompany ID 使用小端序4C 00 0x004C后面的01 02 03 04 05是厂商自定义数据。需要注意0xFF 的 AD Data 中只有前 2 字节 Company ID 是标准规定的 后面的 Manufacturer Data 由厂商自己定义。所以 Manufacturer Data 可能表示设备型号、MAC 地址、序列号、传感器数据、业务状态等具体要看厂商协议。三、完整示例下面用一段脱敏后的 rawBytes 举例02 01 06 03 03 0F 18 08 09 44 65 76 69 63 65 31 08 FF 4C 00 01 02 03 04 05 03 19 C1 03逐段解析如下。第 1 段02 01 06解析02 Length 01 AD TypeFlags 06 AD Data0x06表示LE General Discoverable Mode BR/EDR Not Supported第 2 段03 03 0F 18解析03 Length 03 AD TypeComplete List of 16-bit Service UUIDs 0F 18 AD Data小端序解析0F 18 0x180F补全成 128-bit UUID0000180f-0000-1000-8000-00805f9b34fb第 3 段08 09 44 65 76 69 63 65 31解析08 Length 09 AD TypeComplete Local Name 44 65 76 69 63 65 31 AD Data按 UTF-8 字符串解析Device1第 4 段08 FF 4C 00 01 02 03 04 05解析08 Length FF AD TypeManufacturer Specific Data 4C 00 Company ID 01 02 03 04 05 Manufacturer DataCompany ID 小端序4C 00 0x004CManufacturer Data01 02 03 04 05这部分是厂商自定义数据不能只根据蓝牙通用规则继续判断其业务含义。第 5 段03 19 C1 03解析03 Length 19 AD TypeAppearance C1 03 AD Data小端序解析C1 03 0x03C1表示Keyboard四、解析总结BLErawBytes的解析核心是Length | AD Type | AD Data解析规则是1. 先读取 1 字节 Length 2. 再读取 1 字节 AD Type 3. 再读取 Length - 1 字节 AD Data 4. 根据 AD Type 决定 AD Data 的解析方式 5. 继续解析下一段 AD Structure需要特别注意Length 不包含自己 Length 包含 AD Type AD Data 长度 Length - 1 UUID 通常按小端序解析 Local Name 按 UTF-8 字符串解析 Manufacturer Specific Data 只有前 2 字节 Company ID 是通用格式后面的数据由厂商自定义因此拿到 BLE 广播rawBytes后不能直接把整段数据当成业务数据解析而应该先按照 BLE AD Structure 拆分再根据不同的 AD Type 分别解析。