首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 3-将c结构sockaddr_in转换为CFData

Swift 3-将c结构sockaddr_in转换为CFData
EN

Stack Overflow用户
提问于 2016-09-07 21:40:20
回答 1查看 2.1K关注 0票数 4

我需要你的帮助,这个代码在Swift 3中不能再编译了

代码语言:javascript
复制
//: Let's set up the `sockaddr_in` C structure using the initializer.
var sin = sockaddr_in(
    sin_len: UInt8(sizeof(sockaddr_in)),
    sin_family: sa_family_t(AF_INET),
    sin_port: in_port_t(0),
    sin_addr: in_addr(s_addr: inet_addr(routerIP)),
    sin_zero: (0,0,0,0,0,0,0,0)
)

//: Now convert the structure into a `CFData` object.
let data = withUnsafePointer(&sin) { ptr in
    CFDataCreate(kCFAllocatorDefault, UnsafePointer(ptr), sizeof(sockaddr_in))
}

//: Create the `CFHostRef` with the `CFData` object and store the retained value for later use.
host = CFHostCreateWithAddress(kCFAllocatorDefault, data).takeRetainedValue()

我必须修改"withUnsafePointer“这行代码,但我不知道该怎么做?

我试过这样的东西

代码语言:javascript
复制
    let data = withUnsafePointer(to: &sin) { ptr in
        CFDataCreate(kCFAllocatorDefault, UnsafePointer(ptr), MemoryLayout<sockaddr_in>.size)
    }

编译器说我必须使用withMemoryRebound,但是如何使用呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-09 08:35:23

NSData提供了一种方便的方法来帮助您完成此任务,然后您可以利用免费桥接将其转换为CFData

代码语言:javascript
复制
let data = NSData(bytes: &sin, length: MemoryLayout<sockaddr_in>.size) as CFData
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39371518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档