繁体   English   中英

如何使用字节数组初始化 Swift 中的结构 object?

[英]How can I use an array of bytes to initialize a struct object in Swift?

首先,我来自 C 编程背景。 我的系统由一个设备组成,该设备使用以 C 语言编写的软件,该语言利用蓝牙与 iPhone 应用程序对话。 我在 C 设备上定义了一个结构,我通过蓝牙逐字节发送,我试图在 Swift 中重建结构。

在 C 中,我将使用指向字节数组的指针并将其简单地转换为我的自定义结构类型的指针:

uint8_t arrayOfBytes[16];

CustomStructType_t * structPtr = (CustomStructType_t *)arrayOfBytes;

在 C 中,这很简单。 我有一个字节数组,但我使用类型转换将其表示为自定义结构。

现在在 iPhone 上,我使用 Core Bluetooth 捕获传入的蓝牙字节。 当更新特性时,以下行接受蓝牙数据包并将其从数据类型转换为字节字符串。

let incomingByteString = String(data: receivedBluetoothDataPacket, encoding: String.Encoding.utf8)

在这一点上,我真的很迷茫。 我想使用这个数据包来初始化或更新结构 object 的值,可以说:

struct CustomStruct {
  let name: String!
  let value: Int
}

如果我能告诉 Swift,嘿,我希望你从这个传入的字节字符串中创建一个 CustomStruct object,那就太好了。

看起来这将是一个真正的痛苦,我可能需要以不同的方式格式化传入的数据包以适应 Swift。 任何建议表示赞赏。

尝试这个

let bytes: [UInt8] = //get your bytes here
let customStruct = bytes.withUnsafeBufferPointer {
    ($0.baseAddress!.withMemoryRebound(to: CustomStruct.self, capacity: 1) { $0 })
}.pointee

您必须将receivedBluetoothDataPacket的BluetoothDataPacket 转换为[UInt8]并且您没有提供确切的类型。

假设它是Data ,一个简单的[UInt8](receivedBluetoothDataPacket)就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM