首页 > 解决方案 > 当字节长于 20 时如何修复此代码?

问题描述

我试图弄清楚如何从具有超过 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),如果我简单地忽略它,我会遇到麻烦(这就是我的代码现在所做的,如下所示)

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。提前感谢您提供的任何帮助。

标签: swiftcore-bluetoothcharacteristics

解决方案


推荐阅读