如何将 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&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 属性。

【讨论】:

以上是关于如何将 UnsafeMutablePointer<Void> 转换为 UInt8?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UnsafeMutablePointer<Void> 转换为 UInt8?

如何快速将自己转换为 UnsafeMutablePointer<Void> 类型

如何快速将自己转换为 UnsafeMutablePointer<Void> 类型

Swift:无法将“UnsafeMutablePointer”类型的值转换为预期的参数类型“UnsafeMutablePointer”

如何转换 UnsafePointer<UnsafeMutablePointer<Float>>?到 UnsafeMutablePointer<UnsafeMutableP

将 UnsafeMutablePointer<Int16> 转换为 UInt8