【问题标题】:How do you convert a UnsafeMutablePointer<Void> to UInt8?如何将 UnsafeMutablePointer<Void> 转换为 UInt8?
【发布时间】:2015-07-25 12:24:22
【问题描述】:

这个问题很简单,但不知怎么做:

如何将 UnsafeMutablePointer 转换为 UInt8?

我尝试像这样转换它:

UInt8(theUnsafeMutablePointerVar)

但它给了我以下错误:找不到接受类型为“UnsafeMutablePointer”的参数列表的“UInt8”类型的初始化程序

【问题讨论】:

    标签: swift type-conversion


    【解决方案1】:

    您必须先将指针转换为正确的类型 (指向UInt8 的指针),然后您可以访问它指向的内存:

    let u8 = UnsafePointer<UInt8>(theUnsafeMutablePointerVar).memory
    

    Swift 3 中, 来自 C 的 void 指针被导入到 Swift UnsafeMutableRawPointer,可以读取指向的数据 与

    let u8 = theUnsafeMutablePointerVar.load(as: UInt8.self)
    

    【讨论】:

    • UnsafePointer&lt;UInt8&gt;(theUnsafeMutablePointerVar) 对我不起作用。 Cannot invoke initializer for type 'UnsafePointer&lt;UInt8&gt;' with an argument list of type '(UnsafeMutablePointer&lt;Void&gt;)'。如果我尝试 UnsafeMutablePointer&lt;UInt8&gt; 而不是 UnsafePointer 也是一样。
    • 版本 7.3.1 (7D1014)
    • @HughHughTeotl:它仍然对我有用。在您的情况下,UnsafeMutablePointerVar 是什么类型?
    • @Lneuner:在你的情况下theUnsafeMutablePointerVar 是什么类型?
    • @HughHughTeotl 如果您直接替换函数中的转换,它将不起作用。只需尝试将其分配给答案中的常量:let u8 = UnsafePointer&lt;UInt8&gt;(theUnsafeMutablePointerVar).memory,然后在需要的地方使用u8。它帮助了我。奇怪!
    【解决方案2】:

    在最新的 Swift 中使用 pointee 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多