我有字节转储,我需要解析结构
c++ 示例:
(*(SomeStruct*)(bufPtr))
我怎样才能快速做到这一点?
相当于您的 C 代码将是:
let s = UnsafePointer<SomeStruct>(bufPtr).memory
(假设bufPtr
是UnsafePointer
具有未命名参数初始化器的类型 - 如果没有,您可能需要另一个特定的初始化器,或者做更多的强制。)
适用于 C/C++ 的相同注意事项也适用于此处,即如果结果bufPtr
不指向 a SomeStruct
,您将感到抱歉。
另一方面,如果您想逐个遍历字节,则可以创建一个var ptr = UnsafePointer<UInt8>(bufPtr)
,它可以像 C 指针(即ptr[i]
和 ++ptr
)一样被索引和递增。
如果你事先知道你读了多少字节,你也可以把它放在一个缓冲区 ( let buf = UnsafeBufferPointer(start: ptr, count: i)
) 中,这样你就可以把它当作一个普通的集合来对待(与for-in
,map
等一起使用find
)。同样,关键在于名称——如果你搞砸了计数,这是不安全的。