我有转储字节,我需要解析结构
c ++ exmpl:
(*(SomeStruct*)(bufPtr))
我怎么能在swift上做到这一点?
答案 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
等)。同样,关键在于名称 - 如果你搞砸计数,这是不安全的。