为何文档标注为UInt8的蓝牙阻力级别实际被读取为Int16?
问题:GATT室内单车数据特征中阻力级别类型的疑问
已尝试操作
- 查阅了
GATT_Specification_Supplement_v10.pdf及该文档的历史公开版本 - 参考了Stack Overflow相关问题及第三方蓝牙库
在GATT_Specification_Supplement_v10.pdf的3.125 Indoor Bike Data特征中,阻力级别被标注为UInt8,但实际读取时它是Int16类型,需用两个UInt8字节表示。
此外,在Stack Overflow上发现第三方文档将该值标注为SInt16,第三方库BluetoothMessageProtocol也将其解析为Int16,代码示例如下:
// File: CharacteristicIndoorBikeData.swift // Line: 172 var resistanceLevel: Int16? if flags.contains(.resistanceLevelPresent) { resistanceLevel = decoder.decodeInt16(data) }
是否是我理解有误?还是文档存在问题?(我倾向于不是文档问题)
原始数据
以下为采集的原始字节数组数据:
// 原始字节数组数据 - 以十进制整数表示 ▿ 19 elements - 0 : 116 - 1 : 3 - 2 : 0 - 3 : 0 - 4 : 62 - 5 : 0 - 6 : 0 - 7 : 0 - 8 : 0 - 9 : 16 - 10 : 0 - 11 : 0 - 12 : 0 - 13 : 0 - 14 : 0 - 15 : 0 - 16 : 0 - 17 : 0 - 18 : 0
// 实际骑行时采集的数据(阻力级别从17调整至22) [116, 3, 0, 0, 96, 0, 163, 0, 0, 19, 0, 0, 0, 2, 0, 0, 0, 0, 0] [116, 3, 178, 12, 176, 0, 171, 0, 0, 17, 0, 162, 0, 3, 0, 0, 0, 0, 0] [116, 3, 66, 14, 206, 0, 181, 0, 0, 17, 0, 219, 0, 3, 0, 0, 0, 0, 0] [116, 3, 126, 14, 226, 0, 192, 0, 0, 16, 0, 229, 0, 3, 0, 0, 0, 0, 0] [116, 3, 146, 14, 224, 0, 202, 0, 0, 16, 0, 233, 0, 3, 0, 0, 0, 0, 0] [116, 3, 142, 13, 184, 0, 212, 0, 0, 16, 0, 192, 0, 4, 0, 0, 0, 0, 0] [116, 3, 78, 12, 154, 0, 221, 0, 0, 18, 0, 150, 0, 4, 0, 0, 0, 0, 0] [116, 3, 170, 10, 120, 0, 229, 0, 0, 18, 0, 103, 0, 4, 0, 0, 0, 0, 0] [116, 3, 126, 9, 100, 0, 236, 0, 0, 18, 0, 77, 0, 4, 0, 0, 0, 0, 0] [116, 3, 152, 8, 84, 0, 236, 0, 0, 19, 0, 57, 0, 4, 0, 0, 0, 0, 0] [116, 3, 98, 7, 60, 0, 242, 0, 0, 21, 0, 42, 0, 4, 0, 0, 0, 0, 0] [116, 3, 234, 6, 50, 0, 247, 0, 0, 21, 0, 31, 0, 4, 0, 0, 0, 0, 0] [116, 3, 114, 6, 40, 0, 252, 0, 0, 21, 0, 22, 0, 4, 0, 0, 0, 0, 0] [116, 3, 114, 6, 40, 0, 0, 1, 0, 21, 0, 22, 0, 4, 0, 0, 0, 0, 0] [116, 3, 100, 5, 28, 0, 4, 1, 0, 22, 0, 12, 0, 4, 0, 0, 0, 0, 0] [116, 3, 100, 5, 28, 0, 8, 1, 0, 22, 0, 12, 0, 4, 0, 0, 0, 0, 0]
// 为方便查看,flags字段以16位二进制表示 1101110100
内容的提问来源于stack exchange,提问作者3366784
相关产品推荐
相关产品推荐

