2017-08-09 52 views
3

ストリーム内の構造体を渡して、ソケットを介して別のデバイスに送信しようとしています。コードは機能しますが、間違ったデータが送信されます。ランダムなデータが送信されるたびに、私は間違ったことをしています。どこが間違っていますか?ここに私のコードは次のとおりです。SwiftのoutputStreamに構造体を書き込む3

public struct PStypes { 
    var u: UInt32    //< [X_XXXXXX V] 
    var i: UInt32    //< [X_XXXXXX A] 
    } 
func sendMessage(message: String) { 
    var task = PStypes(u: 7, i: 9) 
    var bufferData = NSData(bytes: &task, length: 8) 
    var data:Data = bufferData as Data 
    var bufferDataSize = data.count     
    let bytesWritten = withUnsafePointer(to: &data) { 
     $0.withMemoryRebound(to: UInt8.self, capacity: bufferDataSize) { 
      outputStream.write($0, maxLength: bufferDataSize) 
     } 
    } 
} 

答えて

0

するvarタスク= PStypes(U:7、私は:9)

私はあなたがのInt値を渡す代わりにていると思いUInt32型

+0

構造体の "i"と "u"プロパティの定義を見てください... UInt32 – BonanzaDriver

+0

ありがとう。私は修正しました。しかし、それは変わらない –

2

問題がされこのコードで:

let bytesWritten = withUnsafePointer(to: &data) { 
    $0.withMemoryRebound(to: UInt8.self, capacity: bufferDataSize) { 
     outputStream.write($0, maxLength: bufferDataSize) 
    } 
} 

これはData Dにあなたにポインタを与えて終わります構造自体が保持するデータではありません。これを修正するには、

let bytesWritten = data.withUnsafeBytes { 
    outputStream.write($0, maxLength: 8) 
} 

これもコードを少し簡略化します。

関連する問題