我想快速使用outputStream.write()在输出流上发送Int

时间:2018-07-28 04:04:43

标签: swift tcp swift4 serversocket

我必须通过输出流发送length of a byte array, 以下是我使用的代码,但出现此错误:

  

“无法将类型'UnsafePointer'的值转换为预期值   参数类型'UnsafePointer <_>'“

withUnsafePointer(to: &len) { (pointer: UnsafePointer<Int>) -> Void in
    outputStream.write(UnsafePointer<UInt8>(pointer), maxLength: 4)
}

如果有人可以告诉我我要去哪里错或建议其他方法。

1 个答案:

答案 0 :(得分:0)

首先,如果要按主机顺序发送4个字节到OutputStream,则最好将var声明为Int32,而不是Int

您的代码使用了一种在古老的Swift中发现的转换指针类型的方式。

尝试一下:

var len4 = Int32(len)
withUnsafeBytes(of: &len4) { bufPtr in
    outputStream.write(bufPtr.baseAddress!.assumingMemoryBound(to: UInt8.self), maxLength: bufPtr.count)
}

或者,如果您想按照网络顺序发送4个字节(如标签所建议的那样),则可能需要对上述代码进行一些修改。

var len4 = Int32(len).bigEndian
withUnsafeBytes(of: &len4) { bufPtr in
    outputStream.write(bufPtr.baseAddress!.assumingMemoryBound(to: UInt8.self), maxLength: bufPtr.count)
}