在Swift 3中向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)
        }
    }   
}
2个回答

2

问题出在这段代码:

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

这最终会给你一个指向 Data 数据结构本身而不是它所持有的数据的指针。你可以使用以下方式解决:

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

这也让代码更简单了一些!

0

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

我认为您传递的是Int值,而不是UInt32


看一下结构体中“i”和“u”属性的定义...UInt32 - BonanzaDriver
谢谢。我已经修复了。但是那并没有改变。 - Wow zone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接