Swift 如何将数据转换为非安全指针<;UInt8>;?

Swift 如何将数据转换为非安全指针<;UInt8>;?,swift,unsafe-pointers,Swift,Unsafe Pointers,在Swift中,我想将data类型的数据缓冲区(名为data)传递给C函数(名为do\u something),该函数接受类型的指针 下面的代码示例正确吗?如果是这样,在这种情况下可以使用assumingmemorybind(to:)而不是bindMemory(to:capacity:) 正确的方法是使用bindMemory(): 只有当内存已绑定到指定类型时,才能使用AssumingMemoryBind() 有关此主题的一些资源: 如果我没有弄错的话,将数据转换为[UInt8]并将其作为

在Swift中,我想将
data
类型的数据缓冲区(名为
data
)传递给C函数(名为
do\u something
),该函数接受
类型的指针

下面的代码示例正确吗?如果是这样,在这种情况下可以使用
assumingmemorybind(to:)
而不是
bindMemory(to:capacity:)


正确的方法是使用
bindMemory()

只有当内存已绑定到指定类型时,才能使用
AssumingMemoryBind()

有关此主题的一些资源:


如果我没有弄错的话,将
数据
转换为
[UInt8]
并将其作为指针传递不是更容易吗?@vadian:编码更容易,但运行时效率更低。它将创建一个额外的(临时)数组。谢谢,但是您如何知道内存尚未绑定到
UInt8
类型?@ma11hew28:bindMemory绑定或重新绑定内存位置,因此它是否已绑定到UInt8并不重要。这里也有很好的信息:。还请注意,“绑定内存向编译器传达内存位置对于类型化访问是安全的。在运行时不会发生任何事情——直到有人编写类型安全消毒剂。”确定。但我希望我的应用程序运行得更快。你是说,即使我(不必要地)将内存重新绑定到它已经绑定的类型,我的应用程序也会运行得同样快(就像我没有一样)?
data.withUnsafeBytes { (unsafeBytes) in
  let bytes = unsafeBytes.baseAddress!.assumingMemoryBound(to: UInt8.self)
  do_something(bytes, unsafeBytes.count)
}
data.withUnsafeBytes { (unsafeBytes) in
    let bytes = unsafeBytes.bindMemory(to: UInt8.self).baseAddress!
    do_something(bytes, unsafeBytes.count)
}