一尘不染

如何从UnsafeMutableRawPointer中获取字节?

swift

UnsafeMutableRawPointer(Swift 3中的新增功能)指向的一个字节如何从内存中访问字节(或Int16,float等),然后由C
API(核心音频等)传递给Swift函数。


阅读 310

收藏
2020-07-07

共1个答案

一尘不染

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

let ptr = ... // Unsafe[Mutable]RawPointer
let i16 = ptr.load(as: UInt16.self)

(可选)字节偏移量:

let i16 = ptr.load(fromByteOffset: 4, as: UInt16.self)

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

let i16 = ptr.assumingMemoryBound(to: UInt16.self).pointee

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

let i16bufptr = UnsafeBufferPointer(start: ptr.assumingMemoryBound(to: UInt16.self), count: count)

缓冲区指针可能已经足够满足您的目的,它可以下标,并且可以类似于数组进行枚举。如有必要,从缓冲区指针创建一个数组:

let i16array = Array(i16bufptr)

正如@Hamish所说,可以在以下位置找到更多信息和详细信息:

2020-07-07