首页 > 解决方案 > 从发送阵列数据的核心蓝牙外设读取数据?

问题描述

我正在尝试读取 Peripheral 发送的数组数据并将其解析为 Swift 数组形式。

外围设备正在发送数据,例如:Array[1 To 15] Numbers。(对于满量程目的,此整数值范围在 1000 到 2000 之间)。但现在我正试图让它与 1 到 15 个整数值一起工作。我能够以编码格式获得字符串格式的结果。我的问题是如何在 swift 中从 didUpdateValueFor 方法的 Characteristic.value 中获取数组 1 到 15。

这是供参考的代码片段。

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

    if characteristic == rxCharacteristic {
        count += 1
        let data = characteristic.value
        print("Count: \(count), data: \(data! as NSData)")


    }
}

在 X-Code 控制台打印的结果是:

计数:2,数据:<00000100 02>
计数:3,数据:<00030004 00050006 00070008 0009000a 000b000c>
计数:4,数据:<000d00>
计数:5,数据:<0e000f00>

标签: swiftbluetooth-lowenergycore-bluetoothcbcentralmanagerios-bluetooth

解决方案


使用下面的代码Intarray.

不要忘记重置count = 0values.removeAll()数据请求。

我假设你characteristics.valueInt价值

var values:[Int] = []
    func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {

        if characteristic == rxCharacteristic {
            count += 1
            if let data = characteristic.value {
                var num = 0
                //Convert Data to Int
                data.getBytes(&num, length: MemoryLayout<Int>.size)
                values.append(num)
            }
            print("Count: \(count), data: \(data! as NSData)")
          }
    }

推荐阅读