我有字节转储,我需要解析结构
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
等一起使用)。同样,关键在名称中 - 如果您搞砸了计数,这是不安全的。
关于swift - 从字节数组到结构的转换。 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28320485/