如何将 UnsafeMutablePointer<Void> 转换为 UInt8?
Posted
技术标签:
【中文标题】如何将 UnsafeMutablePointer<Void> 转换为 UInt8?【英文标题】:How do you convert a UnsafeMutablePointer<Void> to UInt8? 【发布时间】:2015-07-25 12:24:22 【问题描述】:这个问题很简单,但不知怎么做:
如何将 UnsafeMutablePointer 转换为 UInt8?
我尝试像这样转换它:
UInt8(theUnsafeMutablePointerVar)
但它给了我以下错误:找不到接受类型为“UnsafeMutablePointer”的参数列表的“UInt8”类型的初始化程序
【问题讨论】:
【参考方案1】:您必须先将指针转换为正确的类型
(指向UInt8
的指针),然后您可以访问它指向的内存:
let u8 = UnsafePointer<UInt8>(theUnsafeMutablePointerVar).memory
在 Swift 3 中, 来自 C 的 void 指针被导入到 Swift
UnsafeMutableRawPointer
,可以读取指向的数据
与
let u8 = theUnsafeMutablePointerVar.load(as: UInt8.self)
【讨论】:
UnsafePointer<UInt8>(theUnsafeMutablePointerVar)
对我不起作用。 Cannot invoke initializer for type 'UnsafePointer<UInt8>' with an argument list of type '(UnsafeMutablePointer<Void>)'
。如果我尝试 UnsafeMutablePointer<UInt8>
而不是 UnsafePointer
也是一样。
版本 7.3.1 (7D1014)
@HughHughTeotl:它仍然对我有用。在您的情况下,UnsafeMutablePointerVar 是什么类型?
@Lneuner:在你的情况下theUnsafeMutablePointerVar
是什么类型?
@HughHughTeotl 如果您直接替换函数中的转换,它将不起作用。只需尝试将其分配给答案中的常量:let u8 = UnsafePointer<UInt8>(theUnsafeMutablePointerVar).memory
,然后在需要的地方使用u8
。它帮助了我。奇怪!【参考方案2】:
在最新的 Swift 中使用 pointee
属性。
【讨论】:
以上是关于如何将 UnsafeMutablePointer<Void> 转换为 UInt8?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UnsafeMutablePointer<Void> 转换为 UInt8?
如何快速将自己转换为 UnsafeMutablePointer<Void> 类型
如何快速将自己转换为 UnsafeMutablePointer<Void> 类型
Swift:无法将“UnsafeMutablePointer”类型的值转换为预期的参数类型“UnsafeMutablePointer”
如何转换 UnsafePointer<UnsafeMutablePointer<Float>>?到 UnsafeMutablePointer<UnsafeMutableP