如何在swift中将sockaddr_in转换为sockaddr
发布时间:2020-12-14 04:41:01 所属栏目:百科 来源:网络整理
导读:我试图在 swift中做一些网络代码,类型检查让我适合. var sock: CInt = ...var rin: sockaddr_invar rlen = socklen_t(sizeof(sockaddr_in))var buffer: CChar[] = CChar[](count: 128,repeatedValue: 0)let len = recvfrom(sock,buffer,128,rin,rlen) 编译器
我试图在
swift中做一些网络代码,类型检查让我适合.
var sock: CInt = ... var rin: sockaddr_in var rlen = socklen_t(sizeof(sockaddr_in)) var buffer: CChar[] = CChar[](count: 128,repeatedValue: 0) let len = recvfrom(sock,&buffer,128,&rin,&rlen) 编译器在recvfrom上抱怨(非常密码)关于& rin是指向sockaddr_in而不是sockaddr的指针.我尝试了各种方法来转换指针类型,但我似乎无法做到这一点. 如果我声明它是一个sockaddr我可以让它编译,但后来我不能把它看作sockaddr_in. 解决方法
更新:从Swift 1.2(Xcode 6.3 beta)开始,初始化C结构
变得简单得多: var rin = sockaddr_in() 定义sockaddr_in变量并将所有元素初始化为零. let len = withUnsafeMutablePointer(&rin) { recvfrom(sock,UInt(buffer.count),UnsafeMutablePointer($0),&rlen) } 旧答案:第一个问题是sockaddr_in变量必须在之前初始化 > Swift: Pass Uninitialized C Structure to Imported C function. 使用辅助函数 func initStruct<S>() -> S { let struct_pointer = UnsafeMutablePointer<S>.alloc(1) let struct_memory = struct_pointer.move() struct_pointer.dealloc(1) return struct_memory } 套接字地址可以初始化为 var rin : sockaddr_in = initStruct() 要将sockaddr_in指针强制转换为sockaddr指针,请使用reinterpretCast(). let len = recvfrom(sock,reinterpretCast(&rin),&rlen) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |