[英]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.