我必须通过输出流发送length of a byte array
,
以下是我使用的代码,但出现此错误:
“无法将类型'UnsafePointer'的值转换为预期值 参数类型'UnsafePointer <_>'“
withUnsafePointer(to: &len) { (pointer: UnsafePointer<Int>) -> Void in
outputStream.write(UnsafePointer<UInt8>(pointer), maxLength: 4)
}
如果有人可以告诉我我要去哪里错或建议其他方法。
答案 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)
}