作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如何访问由 C API(Core Audio 等)传递给 Swift 函数的 UnsafeMutableRawPointer(Swift 3 中的新功能)指向的内存之外的字节(或 Int16、 float 等)
最佳答案
load<T>
从内存中读取原始字节并构造一个 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 所说,可以在以下位置找到更多信息和详细信息
关于swift - 如何从 UnsafeMutableRawPointer 中获取字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38983277/
我是一名优秀的程序员,十分优秀!