1

Swift からa を取る C 関数を呼び出すために、UInt16配列を anに変換しようとしています。UnsafeMutablePointer<UInt16>uint16_t *

出発点が[UInt8]で、目的地がUnsafeMutablePointer<UInt8>だったら、すべてが簡単です。配列を に変換しData、そこからNSDataを呼び出しbytes.assumingMemoryBound、これで (ほぼ) 完了です。

しかし、目の前のタスクでは、私が検討しているいくつかの異なるパスがあります。1 つの方法は、 を に変換し、[UInt16]上記[UInt8]と同じデータ パスを使用してから、assumingMemoryBound呼び出しで別の型を指定することです。

ただし、それは予想以上に複雑であることが証明されています。UInt8たった 2 つの s の配列を 1 つに変換する方法については、たくさんの質問がありUInt16ます。1 つのを 2 つの sに変換する方法を尋ねる1 つの質問を見つけましたが、配列を変換するときはすべてがより複雑になっているようです。UInt16UInt8

私が試みている他のアプローチは、単純に配列値を取得し、中間呼び出しまたはそのようなものを使用して[UInt16]変換しようとすることですが、Swift には一致しないさまざまなポインター型がたくさんあります。具体的には、これが私の以前の試みの1つです。UnsafeMutablePointer<UInt16>withUnsafeBytes

array.withUnsafeBytes { (pointer: UnsafeRawBufferPointer) -> UnsafeMutablePointer<UInt16> in
    let mutablePointer = UnsafeMutablePointer<UInt16>(mutating: pointer) // error
    return mutablePointer
}

ただし、次のエラーが発生します。

タイプ「UnsafeRawBufferPointer」の値を予期される引数タイプ「UnsafePointer」に変換できません

おそらく、適切な質問や適切なドキュメント ページをまだ見つけていないだけなので、正しい方向への指針をいただければ幸いです。

4

1 に答える 1