gpt4 book ai didi

ios - 如何将结构发送到 BLE writevalue 中?

转载 作者:行者123 更新时间:2023-11-30 11:03:06 24 4
gpt4 key购买 nike

我尝试使用 swift CoreBluetooth 库将结构参数发送到远程设备,但我将结构参数复制到数组中。实际上在 C# 的 Windows 应用程序中做了同样的事情,但 swift 语法和代码风格非常不同,我无法做到。

您可以在下面找到我的代码

struct Test_Struct {
var value1 : UInt32
var value2 : UInt32
var value3 : UInt8

}

var data : [Test_Struct]=[]

data.append(Test_Struct(value1: 1000, value2: 2000, value3: 02))

我也尝试过类似下面的东西

    var data = Test_Struct.init(value1: <UInt32>, value2: <UInt32>, value3: <UInt8>)

data.value1 = 1000
data.value2 = 1000
data.value3 = 1000

两个代码都没有给我错误,但是当我尝试将“my var”添加到Peripheral.writeValue(数据,用于:myChractaristic,类型:CBCharacteristicWriteType.withoutResponse)我收到一个错误。我还尝试将“var data”添加到 Data 或 NSData 但从未对我有用。

总而言之,我需要复制来构造一些数组,例如 Byte[] array=data_struct,并使用 BLE 写入值命令发送数组值。

提前致谢。

最佳答案

您需要将结构转换为数据。您有几个选择:使您的结构可编码并使用 JSONEncoder() 对您的数据进行编码,或者更好地创建您自己的编码方法,以确保您以所需的最少字节发送数据:

struct TestStruct {
let value1: UInt32
let value2: UInt32
let value3: UInt8
}
<小时/>

将数字属性转换为数据检查 this :

extension Numeric {
var data: Data {
var source = self
return Data(bytes: &source, count: MemoryLayout<Self>.size)
}
}
extension TestStruct {
var data: Data {
return value1.data + value2.data + value3.data
}
}
<小时/>

要从数据初始化您的结构,您可以检查此 answer供引用:

extension TestStruct {
init(data: Data) {
value1 = data[0...3].withUnsafeBytes { $0.pointee }
value2 = data[4...7].withUnsafeBytes { $0.pointee }
value3 = data[8...8].withUnsafeBytes { $0.pointee }
}
}
<小时/>
let test = TestStruct(value1: 10, value2: 20, value3: 30)

let data = test.data
print(data) // "9 bytes\n"
print(data as NSData) // "<0a000000 14000000 1e>\n"

let objectFromData = TestStruct(data: data)

print(objectFromData.value1) // 10
print(objectFromData.value2) // 20
print(objectFromData.value3) // 30

关于ios - 如何将结构发送到 BLE writevalue 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com