objective-c - Swift 4 将字节转换为 Int 和 ntohl

标签 objective-c swift byte

大家好,我一直在尝试将此 objective-c 代码转换为 swift,但一直遇到问题。这是 objective-c 代码:

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

这是我设法得到的:

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

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

最佳答案

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 个字节。)

关于objective-c - Swift 4 将字节转换为 Int 和 ntohl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438001/

相关文章:

macos - Storyboard在 OS X 10.10 上加载失败,有时

C# - MySQL 阻止 TINYINT(1) 到 bool 值的转换

java - 为什么我不能在 Java 中将(字节)数据类型转换为(短)数据类型

objective-c - 如何让我的 View 固定在窗口的右侧?

objective-c - 调用从 ObjC 获取 bool(而不是 BOOL)的 C 函数

objective-c - 用另一个数组过滤数组 PFObjects

python - 为什么 b'\x02' 与 Python 中的值 2 或 int(2) 不同?

iPhone GPS - 未收到有效的位置更新

ios - 如何减慢 iOS 版 Google map 中的相机动画位置?

swift - DetailViewControllers 内容被截断