2017-08-09 2 views
3

Ich versuche, eine Struktur in einem Stream zu übergeben, so dass es dann über den Socket an ein anderes Gerät gesendet wird. Der Code funktioniert, aber die falschen Daten werden gesendet. Und jedes Mal, wenn zufällige Daten gesendet werden - dann mache ich etwas falsch. Wo liege ich falsch? Hier ist mein Code:Schreiben von Struktur zu einem outputStream in Swift 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) 
     } 
    } 
} 

Antwort

0

var task = PStypes (u: 7, i: 9)

Ich glaube, Sie sind vorbei Int Wert statt UInt32

+0

Schauen Sie sich die Definitionen für die "i" und "u" Eigenschaften der Struktur an ... UInt32 – BonanzaDriver

+0

Vielen Dank.Ich habe es behoben. Das ändert sich aber nicht –

2

Das Problem ist, mit diesem Code:

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

dies endet Sie einen Zeiger auf die Data d geben ata Struktur selbst nicht die Daten, die es hält. Sie können dies beheben mit:

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

dies vereinfacht auch den Code ein wenig!

Verwandte Themen