我正在尝试将UInt16
数组转换为 anUnsafeMutablePointer<UInt16>
以调用uint16_t *
从 Swift 获取 a 的 C 函数。
如果我的起点是[UInt8]
,我的目的地UnsafeMutablePointer<UInt8>
是,一切都会很容易。我可以将数组转换为Data
,从那里转换为NSData
,调用bytes.assumingMemoryBound
,这样我就(几乎)完成了。
然而,随着手头的任务,我正在考虑几种不同的路径。一种方法是将 转换[UInt16]
为[UInt8]
,使用与上述相同的数据路径,然后在assumingMemoryBound
调用中指定不同的类型。
不过,事实证明,这比预期的要复杂得多。关于如何将只有两个UInt8
s的数组转换为一个有很多问题UInt16
;我发现了一个问题,询问如何将单个转换UInt16
为两个UInt8
s,但是在转换数组时,这一切似乎都变得更加复杂。
我正在尝试的另一种方法是简单地获取[UInt16]
数组值并尝试将其转换为UnsafeMutablePointer<UInt16>
使用中间withUnsafeBytes
调用或类似的东西,但 Swift 有一堆不同的指针类型,它们根本不匹配。具体来说,这是我早期的尝试之一:
array.withUnsafeBytes { (pointer: UnsafeRawBufferPointer) -> UnsafeMutablePointer<UInt16> in
let mutablePointer = UnsafeMutablePointer<UInt16>(mutating: pointer) // error
return mutablePointer
}
这虽然会导致以下错误:
无法将“UnsafeRawBufferPointer”类型的值转换为预期的参数类型“UnsafePointer”
也许我还没有找到正确的问题或正确的文档页面,所以我很感激任何正确方向的指示!