gpt4 book ai didi

swift - 在 Swift 3 中,如何从数据中获取 UnsafeRawPointer?

转载 作者:IT王子 更新时间:2023-10-29 05:18:15 27 4
gpt4 key购买 nike

根据 Swift 3 中 Data 的文档,我可以使用一个初始化程序从 UnsafeRawPointer 创建 Data。我需要的实际上是相反的。我有一个数据,我想创建一个指向数据字节的 UnsafeRawPointer。这是我现在正在做的事情:

1. let data = <from some where>
2. let unsafePointer = UnsafeMutablePointer<UInt8>.allocate(capacity: data.count)
3. unsafePointer.initialize(to: 0, count: data.count) // is this necessary?
4. data.copyBytes(to: unsafePointer, count: data.count)
5. let unsafeRawPointer = unsafePointer.deinitialize() // this is of the type UnsafeMutalbleRawPointer, and I can use it where UnsafeRawPointer is needed.

我已验证此代码在 Xcode Playground 中有效。该代码甚至可以在没有第 3 行的情况下工作。我不确定有没有这行有什么区别。不管怎样,我的问题是,我做的对吗?有更简单的方法吗?

最佳答案

withUnsafeBytes() 为您提供指向字节的(类型化)指针,这可以转换为原始指针:

let data = <Data from somewhere>
data.withUnsafeBytes { (u8Ptr: UnsafePointer<UInt8>) in
let rawPtr = UnsafeRawPointer(u8Ptr)
// ... use `rawPtr` ...
}

指针只在调用的生命周期内有效关闭。

或者,您可以桥接到 NSData 并访问原始字节:

let nsData = data as NSData
let rawPtr = nsData.bytes

现在指针在 nsData 有效的同一范围内有效。

Swift 5 开始

let data = <Data from somewhere>
data.withUnsafeBytes { rawBufferPointer in
let rawPtr = rawBufferPointer.baseAddress!
// ... use `rawPtr` ...
}

因为闭包参数现在是一个 UnsafeRawBufferPointer

关于swift - 在 Swift 3 中,如何从数据中获取 UnsafeRawPointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com