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

时间:2015-02-04 11:40:50

标签: swift swift-extensions

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

c ++ exmpl:

(*(SomeStruct*)(bufPtr))

我怎么能在swift上做到这一点?

1 个答案:

答案 0 :(得分:2)

您的C代码的等价物是:

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

(假设bufPtr属于UnsafePointer具有未命名参数初始值设定项的类型 - 如果不是,则可能需要另一个特定的初始化程序,或者进行更多强制。)

适用于C / C ++的相同注意事项适用于此处,即如果结果bufPtr未指向SomeStruct,您会感到抱歉。

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

如果你事先知道你读过多少字节,你也可以把它放在一个缓冲区(++ptr)中,这样你就可以把它当作常规集合来处理(与let buf = UnsafeBufferPointer(start: ptr, count: i)一起使用,{ {1}},for-in等)。同样,关键在于名称 - 如果你搞砸计数,这是不安全的。