2017-09-27 7 views
0

3パケットで分割されたパックド構造体のブルートゥースデータを受信して​​います。各パケットの最初のバイトはこのパケットの番号で残りはデータです。私は、アセンブリにstuctを次のコードを使用しています:memcpyと構造体へのスウィフト

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { 
     guard let value = characteristic.value as NSData? else { return } 

     var packetNumber = UInt8() 
     let maxPacketSize = 17 

     value.getBytes(&packetNumber, length: 1) 

     memcpy(&settings + maxPacketSize * (Int(packetNumber) - 1), value.bytes + 1, value.length - 1) 
} 

それはそれはゼロで埋めたまま、最初のパケットでうまく動作しますが、第二と第三のパケットが構造体にコピーされません。 objcの同じアプローチはすべての3つのパケットでうまく動作します。なにが問題ですか?

ありがとうございます!

答えて

0

いくつかの実験の後、私は動作するコードを見つけることができた:

 let destination: UnsafeMutableRawPointer = &settings + maxPacketSize * (Int(packetNumber) - 1) 
     memcpy(destination, value.bytes + 1, value.length - 1) 

はそれだけでUnsafeRawPointerを作成しUnsafeMutableRawPointerの明示的な宣言のないように見えます。興味深いことに、オフセットが追加された場合のみでした。

関連する問題