0

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

c++ 示例:

(*(SomeStruct*)(bufPtr))

我怎样才能快速做到这一点?

4

1 回答 1

2

相当于您的 C 代码将是:

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

(假设bufPtrUnsafePointer具有未命名参数初始化器的类型 - 如果没有,您可能需要另一个特定的初始化器,或者做更多的强制。)

适用于 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)。同样,关键在于名称——如果你搞砸了计数,这是不安全的。

于 2015-02-04T12:49:05.387 回答