我有字节转储,需要解析结构
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-in
、map
、find
等一起使用)。同样,钥匙在名字里——如果你搞砸了计数,这是不安全的。