如何访问由 C API(Core Audio 等)传递给 Swift 函数的 UnsafeMutableRawPointer(Swift 3 中的新功能)指向的内存之外的字节(或 Int16、浮点数等)
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
to a 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 所说,更多信息和细节可以在
- SE-0107 不安全RawPointer API https://github.com/apple/swift-evolution/blob/master/proposals/0107-unsaferawpointer.md
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)