如何解析iBeacon传输至服务器的rawData十六进制值?
iBeacon rawData 解析思路
rawData是BLE蓝牙广播包的十六进制字符串形式,BLE广播包由多个AD结构(长度+类型+数据)串联组成,每个AD结构的规则是:
- 第1字节:长度(等于「类型字节数+数据字节数」,即后续N-1字节的总长度)
- 第2字节:AD类型(标识该段数据的用途)
- 剩余N-1字节:对应类型的数据
下面结合你提供的示例拆解解析过程:
示例2(标准iBeacon广播包)
rawData: 0201061AFF4C000215FDA50693A4E24FB1AFCFC6EB0764782527114CB9C5
按AD结构拆分解析:
- 第一个AD结构:
02 01 0602:长度(后续2字节:类型+数据)01:AD类型为「Flags(设备标识)」06:数据二进制为00000110,表示设备处于BLE可被发现模式且不支持传统蓝牙(BR/EDR)
- 第二个AD结构:
1A FF 4C000215FDA50693A4E24FB1AFCFC6EB0764782527114CB9C51A:长度(后续26字节:类型+数据)FF:AD类型为「厂商自定义数据」4C00:厂商ID(小端序,对应苹果的官方蓝牙厂商代码004C)0215:iBeacon固定标识(02是子类型,15表示后续数据长度为21字节)- 核心数据拆分:
- UUID:
FDA50693-A4E2-4FB1-AFCF-C6EB07647825(前16字节) - Major:
2711(后续2字节,小端序转换:原十六进制1127→十进制10001) - Minor:
4CB9(后续2字节,小端序转换:原十六进制B94C→十进制47436) - TX Power:
C5(最后1字节,有符号十进制为-59,表示iBeacon在1米处的标准RSSI值,用于计算设备距离)
- UUID:
示例1(带自定义服务的扩展广播包)
rawData: 0201060303F1FF1716FDA50693A4E24FB1AFCFC6EB0764782527114CB9C564
比示例2多了一个AD结构:
- 第二个AD结构:
03 03 F1FF03:长度(后续3字节:类型+数据)03:AD类型为「完整16位服务UUID列表」F1FF:自定义的16位服务UUID
- 第三个AD结构:
17 16 F1FFFDA50693A4E24FB1AFCFC6EB0764782527114CB9C56417:长度(后续23字节:类型+数据)16:AD类型为「16位UUID对应的服务数据」F1FF:对应前面的自定义服务UUID- 剩余数据包含和iBeacon一致的UUID、Major、Minor,最后多了字节
64(十进制100),这部分属于厂商自定义扩展字段,需要参考该iBeacon的具体协议文档解析
通用解析步骤
- 将rawData按每2个字符拆分,得到十六进制字节数组(比如
020106拆成['02','01','06']) - 循环遍历字节数组,逐个解析AD结构:
- 取当前第一个字节作为长度N
- 取第二个字节作为AD类型,查询蓝牙官方AD类型定义(比如01=Flags、FF=厂商自定义数据)
- 取后续N-1字节作为对应类型的数据,按对应规则解析
- 针对iBeacon特定规则处理:
- 厂商ID为
004C时,按苹果iBeacon规范拆分UUID、Major、Minor、TX Power - Major/Minor是小端序存储,需要反转字节顺序后转十进制
- TX Power是有符号8位整数,十六进制转十进制时要处理负数(比如
C5转十进制为-59)
- 厂商ID为
内容的提问来源于stack exchange,提问作者user565
相关产品推荐
相关产品推荐

