我有字节转储,需要解析结构
c++示例:

(*(SomeStruct*)(bufPtr))

我怎么用斯威夫特?

最佳答案

相当于你的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-inmapfind等一起使用)。同样,钥匙在名字里——如果你搞砸了计数,这是不安全的。

10-08 14:54