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

时间:2017-06-30 08:31:34

标签: 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 ...有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用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缓冲区的一半。