我有一个从BLE设备获取的20字节的数据对象。
这是当我po
CBCharacteristic
中的数据时的示例:
▿ 20 bytes
- count : 20
▿ pointer : 0x0000000282889ab0
- pointerValue : 10779925168
▿ bytes : 20 elements
- 0 : 16
- 1 : 0
- 2 : 0
- 3 : 21
- 4 : 0
- 5 : 0
- 6 : 20
- 7 : 3
- 8 : 87
- 9 : 154
- 10 : 3
- 11 : 88
- 12 : 204
- 13 : 20
- 14 : 255
- 15 : 197
- 16 : 7
- 17 : 159
- 18 : 56
- 19 : 122
现在我有指令告诉我,在字节1,2,3上有我正在寻找的19位信号(0-524288)
那么我如何获得该信号值?
如果有必要,我将很高兴阅读有关如何独自获得此材料的材料。我没有适当的CS背景,我迷失于如何/在何处寻找它。
谢谢
由于数据来自多个字节,答案取决于协议隐含的endianness。这19位使用2个完整字节,第3个字节中使用3位。
如果这三个字节存储在无符号的8位变量a
,b
和c
中,则值为其中一个
((int)a) << 11 + ((int)b) << 3 + (c & 0x07)
或
((int)c) << 11 + ((int)b) << 3 + (a & 0x07)
a
b
和c
的值取决于字节1、2和3或字节3、2、1,具体取决于协议中指定的顺序。
注:表达式x & 0x07
表示“低三位”,因为0x07
十六进制为00000111
二进制。