从字节数组到结构的对话。 Swift

Converation from array of Bytes to Struct. Swift

我有字节转储,我需要解析结构

C++ 示例:

(*(SomeStruct*)(bufPtr))

如何在 swift 上完成?

你的 C 代码相当于:

let s = UnsafePointer<SomeStruct>(bufPtr).memory

(假设 bufPtr 的类型 UnsafePointer 有一个未命名的参数初始值设定项 - 如果不是,您可能需要另一个特定的初始值设定项,或者做更多的强制转换。)

适用于 C/C++ 的警告同样适用于此处,即如果结果 bufPtr 没有指向 SomeStruct,你会很抱歉。

另一方面,如果你想一个一个地遍历字节,你可以创建一个 var ptr = UnsafePointer<UInt8>(bufPtr),它可以像 C 指针一样被索引和递增(即 ptr[i]++ptr).

如果你事先知道你读取了多少字节,你也可以把它放在一个缓冲区 (let buf = UnsafeBufferPointer(start: ptr, count: i)) 中,这样你就可以像对待普通集合一样对待它 (与 for-in 一起使用, map, find 等)。同样,关键在名字中——如果你把计数搞砸了,这是不安全的。