ios - 如何将 UnsafePointer 映射到另一种类型?

标签 ios swift macos optimization

我正在尝试转换 UnsafePointer<UInt16>UnsafePointer<Float>到目前为止,我以这个解决方案结束:

let bufferSize = 1024
let buffer: UnsafePointer<UInt16> = ....
let tmp = UnsafeBufferPointer(start: buffer, count: bufferSize).map(Float.init)
let converted: UnsafePointer<Float> = UnsafePointer(tmp)

它有效,但我觉得这不是一种有效的方法,因为我正在创建一个中间体 Array ...有更好的方法吗?

最佳答案

您可以使用 withMemoryRebound 将指针从一种类型转换为另一种类型:

buffer.withMemoryRebound(to: Float.self, capacity: 1024) { converted -> Void in
    // use `converted` here
}

但要小心 MemoryLayout<Float>.size4 (即 32 位)和 MemoryLayout<UInt16>显然是 2 (即 16 位),所以 bufferSize你的Float将是你的一半 UInt16缓冲区。

关于ios - 如何将 UnsafePointer 映射到另一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842056/

相关文章:

ios - iOS 有远程推送通知的预算吗?

swift - 如何在 iOS 上的 Swift 中使用 Big5 编码

regex - 如何在 Mac OSX 上的 SED 中使用 PCRE 正则表达式

objective-c - 如何像DVD播放机一样改变空间?

ios - apple review board 是否接受调整音量和亮度控制?

ios - 如何检测 UIImagePickerController 预览状态?

ios - 如何更快地加载 MKMapView?

swift - 将来自 API 的解码数据用于算法

ios - 带有自定义单元格的 TableViewController swift

macos - 在 Mac 上使用 docker 安装 gitlab 的权限问题