Swift 4将字节转换为Int和ntohl

时间:2018-01-25 07:50:38

标签: objective-c swift byte

嘿伙计们,所以我一直试图将这个目标-c代码转换为快速但仍然遇到问题的绊脚石。这是客观的代码:

int msgLength = *((int *) _inputBuffer.bytes);
msgLength = ntohl(msgLength);

以及我设法得到的内容:

var msgLength = (inputBuffer.bytes).load(as: Int.self)
msgLength = Int(NSSwapBigLongToHost(UInt(msgLength)))

但这不起作用,它崩溃说没有足够的位。非常感谢帮助谢谢!

1 个答案:

答案 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_tint更适合强调读取4个字节。)