swift - 从字节数组到结构的转换。 swift

标签 swift swift-extensions

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

C++ 示例:

(*(SomeStruct*)(bufPtr))

我怎样才能在 swift 上做到这一点?

最佳答案

你的 C 代码的等价物是:

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

(假设 bufPtrUnsafePointer 具有未命名参数初始值设定项的类型 - 如果不是,您可能需要另一个特定的初始值设定项,或者进行更多强制转换。)

适用于 C/C++ 的警告同样适用于此处,即如果结果 bufPtr 没有指向 SomeStruct,您会感到抱歉。

另一方面,如果您想一个一个地遍历字节,则可以创建一个 var ptr = UnsafePointer<UInt8>(bufPtr) ,它可以像 C 指针一样进行索引和递增(即 ptr[i]++ptr )。

如果你事先知道你读取了多少字节,你也可以把它放在一个缓冲区(let buf = UnsafeBufferPointer(start: ptr, count: i))中,这样你就可以像对待一个普通的集合一样对待它(与 for-inmapfind 等一起使用)。同样,关键在名称中 - 如果您搞砸了计数,这是不安全的。

关于swift - 从字节数组到结构的转换。 swift ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28320485/

相关文章:

ios - 带委托(delegate)的 Swift 扩展 (UIViewController)

swift - 如何编写一个扩展来支持 [String] 和 [Substring]?

swift - 为什么我的自定义类无法识别 swift 扩展? (即字符串)

swift - 自身,协议(protocol)扩展和非最终类

uitableview - UITableViewCell 和 UIViewController 之间通信的最佳方式

ios - 具有自定义颜色的 UIColor 扩展是真实的吗?

ios - 在 HTTPS 可调用的 Firebase Cloud Functions 中,错误代码的名称是否在 iOS 中可用?

ios - fatal error : unexpectedly found nil while unwrapping an Optional value using AVAudio

ios - 带有 && 操作的快速多个条件 if 语句

ios - 计算包含相同两个值的数组的数量