2017-08-09 110 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)

我想你逝去的詮釋值,而不是UInt32的

+0

看看struct「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 ata結構本身並不是它所擁有的數據。您可以使用以下方法修復此問題:

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

這也簡化了代碼!