我试图将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
...有更好的方法吗?
答案 0 :(得分:1)
您可以使用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
缓冲区的一半。