我正在尝试转换 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>.size
是4
(即 32 位)和 MemoryLayout<UInt16>
显然是 2
(即 16 位),所以 bufferSize
你的Float
将是你的一半 UInt16
缓冲区。
关于ios - 如何将 UnsafePointer 映射到另一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44842056/