嘿伙计们,所以我一直试图将这个目标-c代码转换为快速但仍然遇到问题的绊脚石。这是客观的代码:
int msgLength = *((int *) _inputBuffer.bytes);
msgLength = ntohl(msgLength);
以及我设法得到的内容:
var msgLength = (inputBuffer.bytes).load(as: Int.self)
msgLength = Int(NSSwapBigLongToHost(UInt(msgLength)))
但这不起作用,它崩溃说没有足够的位。非常感谢帮助谢谢!
答案 0 :(得分:2)
C int
类型是32位整数(在所有当前的Apple平台上),
而Swift Int
在64位平台上是64位整数。
因此在Swift中你必须使用UInt32
来表示32位整数:
var msgLength = (inputBuffer.bytes).load(as: UInt32.self)
msgLength = UInt32(bigEndian: msgLength)
或者,如果您从NSData
切换到Data
:
let msgLength = UInt32(bigEndian:inputBuffer.withUnsafeBytes { $0.pointee })
(即使在C代码中uint32_t
比int
更适合强调读取4个字节。)