您可以简单地
Array从初始化Swift
UnsafeBufferPointer:
func convert(length: Int, data: UnsafePointer<Int8>) -> [Int8] { let buffer = UnsafeBufferPointer(start: data, count: length); return Array(buffer)}这将创建所需大小的数组并复制数据。
或作为通用函数:
func convert<T>(count: Int, data: UnsafePointer<T>) -> [T] { let buffer = UnsafeBufferPointer(start: data, count: count); return Array(buffer) }指针指向
length的 项目 数在哪里。
如果您有一个
UInt8指针但想
[T]从指向的数据创建一个数组,那么这是一个可能的解决方案:
// Swift 2:func convert<T>(length: Int, data: UnsafePointer<UInt8>, _: T.Type) -> [T] { let buffer = UnsafeBufferPointer<T>(start: UnsafePointer(data), count: length/strideof(T)); return Array(buffer) }// Swift 3:func convert<T>(length: Int, data: UnsafePointer<UInt8>, _: T.Type) -> [T] { let numItems = length/MemoryLayout<T>.stride let buffer = data.withMemoryRebound(to: T.self, capacity: numItems) { UnsafeBufferPointer(start: $0, count: numItems) } return Array(buffer) }其中
length现在的数目 的字节 。例:
let arr = convert(12, data: ptr, Float.self)
会
Float从指向的12个字节中创建一个3 s 的数组
ptr。



