当字节长于20时如何解决此代码?

时间:2019-04-13 23:57:44

标签: swift core-bluetooth characteristics

我正在尝试找出如何从具有超过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。预先感谢您提供的任何帮助。

0 个答案:

没有答案