一尘不染

如何在Swift中使用htonl设置整数字节序?

swift

我正在尝试htonl()在Swift中使用设置整数字节序,但是编译器没有找到该htonl()方法。

我一直以此为参考:将NSInteger附加到NSMutableData

这是我的代码:

import Foundation
import CFNetwork
import CoreFoundation

var data = NSMutableData()
var number : UInt32 = 12
var convertedNumber : UInt32 = htonl(number)
data.appendBytes(&convertedNumber, length: 4)

我刚刚在操场上跑步。错误是:

Use of unresolved identifier 'htonl'

阅读 468

收藏
2020-07-07

共1个答案

一尘不染

更新
:马丁R的答案是当前版本的Swift的正确答案:https :
//stackoverflow.com/a/24653879/195691

-

您应该使用CFSwapInt32HostToBig()CoreFoundation方法,因为htonl它很可能以C宏的形式实现,因此无法迅速使用。

但是,看起来这在Swift操场上目前无法使用。Playground execution failed: error: error: Couldn't lookup symbols: __OSSwapInt32尽管CoreFoundation文档现在在Swift中为其字节交换方法包括了方法签名,但我还是遇到了错误。

有趣的是,它看起来像的至少一部分<arpa/inet.h>已经被移植到迅速,如方法,如inet_ntoa()inet_addr()可供斯威夫特,但htonl家庭是没有的。

2020-07-07