2016-11-29 3 views
1

Swift [UInt8]バッファをCポインタにコピーしようとしています。私はここで、適切なソリューションを見つけることができない私のコードです:Swift 3の[UInt8]配列をCのポインタにコピーする方法は?

uploadBodyBytes = [UInt8]() 
... 
... 
var data = crl.uploadBodyBytes[crl.bodyBytesUploaded..<crl.bodyBytesUploaded+actualLen] 

_ = data.withUnsafeBytes({ (rawData /*provides UnsafeRawBufferPointer*/) -> UnsafeMutableRawPointer in 
    return memcpy(a, rawData /*expected UnsafeRawPointer*/, actualLen) 
}) 

data.withUnsafeBytesは私にUnsafeRawBufferPointerを与えるが、それはUnsafeRawPointerを期待memcpyと互換性がないように思われます。

ヘルプありがとうございます。

+0

あなたはswiftでmemcpyを使用すべきではありません。地獄のように危険で不器用だ。代わりに、 '[UInt8]'の代わりに 'NSData'を使用してバイトストリームをモデル化する必要があります。コピーを作成するためのイニシャライザが組み込まれています。あなたがこれらのバイトをどのように取得するのか、それらで何をしたいのかに関してより多くのコンテキストを示したら、私はあなたを助けることができます。 – Alexander

+0

私は、既存のcURL Swiftライブラリにいくつかの機能を追加しようとしています。また、何らかの理由でData(NSData)を使用するのではなく、[UInt8]バッファ(Foundationライブラリも含めて)を使用しません。私はすでに書かれている方法に従うべきだと思った。なぜmemcpyがすごくかっこいいはずですか? –

+0

安全でないポインタで作業するため – Alexander

答えて

2

baseAddressプロパティでアクセスできますが、そうする必要はありません。

+0

rawData.baseAddressがトリックをしているようです:) –

+0

私の編集を参照してください。 Swiftにmemcpyを使用する理由は本当にありません:p – Alexander

+0

しかし、私はCのコールバック関数のポインタとして 'a'を取得しています。 let readFunc:curl_func = {(a、size、num、p) - > Int in ...単純にa = rawDataが機能するかどうかはわかりません。 –

関連する問題