我正在尝试找出如何从具有超过20个字节的特征的蓝牙设备中解析该值。
我有下面的代码,基本上每次更新特征值时都会触发。但是,由于值的总量很长,因此在我获取数据总量之前,didUpdateValueFor函数似乎发出了4或5个通知。此刻,我正在遍历该值并将其附加到一个数组,该数组将用于绘制一些数据。有没有一种方法可以将所有数据放入一个数组中,而不必每次都执行此循环?目前,我获取的数据如下:
[89,0,44,0,84,0,112,0,125,0,125,0,134,0,144,0,153,0,162,0]
[89,1,163,0,163,0,162,0,167,0,169,0,172,0,176,0,176,0,177,0]
[89,2,182,0,181,0,181,0,182,0,181,0,169,0,164,0,157,0,139,0]
[89,3,135,0,119,0,117,0,101,0,101,0,84,0,85,0,70,0,70,0]
[84,4,55,0,46,0,26,0,21,0]
每个数组中的第一个值并不重要。但是,第二个值是MS值,应为零。但是,每次循环运行时,似乎每次都增加一。因为我需要将此数字乘以256(如果LS值的值超过256,则应该乘以256),如果我简单地忽略它(这就是我的代码现在在下面发布的内容),我将会遇到麻烦。
if characteristic.uuid == IDENTIFIER {
let v = characteristic.value;
print("this is what we have: \(value)")
//let numDataPoints = v![0] & 0x0f
let numDataPoints = v![0]
print("Number of data points:\(numDataPoints)")
for i in 1...v!.count-2 {
intIndex = Int(i)
let datapointnew = Int(v![intIndex!])
if datapointnew > 5 {
datapointArray.append(datapointnew)
} else {
datapointArray.append(0)
}
}
intIndex = 0
}
对于这组数据,每个数组中的第二个值应为0。预先感谢您提供的任何帮助。