如何从UnsafeMutableRawPointer中获取字节?

hot*_*aw2 23 unsafe-pointers swift

如何通过C API(Core Audio等)将UnsafeMutableRawPointer(Swift 3中的新增内容)指向的内存访问字节(或Int16,浮点数等)移交给Swift函数

Mar*_*n R 44

load<T>从内存中读取原始字节并构造一个类型的值T:

let ptr = ... // Unsafe[Mutable]RawPointer
let i16 = ptr.load(as: UInt16.self)
Run Code Online (Sandbox Code Playgroud)

可选地在字节偏移处:

let i16 = ptr.load(fromByteOffset: 4, as: UInt16.self)
Run Code Online (Sandbox Code Playgroud)

还有assumingMemoryBound(),从一个转换Unsafe[Mutable]RawPointer到一个Unsafe[Mutable]Pointer<T>,假设被指向的存储器包含类型T的值:

let i16 = ptr.assumingMemoryBound(to: UInt16.self).pointee
Run Code Online (Sandbox Code Playgroud)

对于值数组,您可以创建"缓冲区指针":

let i16bufptr = UnsafeBufferPointer(start: ptr.assumingMemoryBound(to: UInt16.self), count: count)
Run Code Online (Sandbox Code Playgroud)

缓冲区指针可能已经足够用于您的目的,它是可订阅的,并且可以与数组类似地枚举.如有必要,从缓冲区指针创建一个数组:

let i16array = Array(i16bufptr)
Run Code Online (Sandbox Code Playgroud)

正如@Hamish所说,可以找到更多信息和细节