【问题标题】:Writing structure to an outputStream in Swift 3在 Swift 3 中将结构写入 outputStream
【发布时间】:2017-08-09 07:41:43
【问题描述】:

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

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

【问题讨论】:

    标签: ios swift struct outputstream


    【解决方案1】:

    问题在于这段代码:

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

    这也稍微简化了代码!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 查看结构的“i”和“u”属性的定义... UInt32
      • 谢谢。我确实修好了。但这并没有改变
      猜你喜欢
      • 2019-09-13
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多