ios - 在 Swift 3 中将结构写入 outputStream

标签 ios swift struct outputstream

我试图在流中传递一个结构,以便它随后通过套接字发送到另一个设备。代码有效,但发送了错误的数据。每次发送随机数据时,我都做错了。我哪里错了?这是我的代码:

 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)
        }
    }   
}

最佳答案

问题在于这段代码:

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)
}

这也稍微简化了代码!

关于ios - 在 Swift 3 中将结构写入 outputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584480/

相关文章:

ios - 从 NSString 获取最大值是 NSArray

C - 结构内静态字符数组上的 sizeof() - 不可能?

iOS:使用 Word Wrap 以编程方式创建标签

Julia 中的结构文字

c++ - 等价于 C++ 中结构初始化的 C 编程语言

ios - 从 PromiseKit wrap 迁移

ios - 无法在 UIWebview 中打开以下 URL

ios - UIButton 没有名为 setTranslatesAutoresizingMaskIntoConstraints 的成员

swift - SpriteKit Hero 移动在节点连接上受阻

xcode - 如何使用 NSUserDefaults 取消存档自定义数组?