我试图将Swift [UInt8]
缓冲区复制到C指针。我无法找到合适的解决方案,这是我的代码:如何将[UInt8]数组复制到Swift 3中的C指针?
uploadBodyBytes = [UInt8]()
...
...
var data = crl.uploadBodyBytes[crl.bodyBytesUploaded..<crl.bodyBytesUploaded+actualLen]
_ = data.withUnsafeBytes({ (rawData /*provides UnsafeRawBufferPointer*/) -> UnsafeMutableRawPointer in
return memcpy(a, rawData /*expected UnsafeRawPointer*/, actualLen)
})
data.withUnsafeBytes
给我UnsafeRawBufferPointer
,但似乎与memcpy
其预计UnsafeRawPointer
不兼容。
帮助赞赏。
你不应该在Swift中使用memcpy。这是不安全和笨拙的地狱。相反,你应该使用'NSData'而不是'[UInt8]'来建模一个字节流。它内置了用于复制的初始化程序。如果您展示更多关于如何获得这些字节以及您想要如何处理这些字节的上下文,我可以为您提供帮助。 – Alexander
我只是想向现有的cURL Swift库添加一些功能。他们不使用数据(NSData)出于某种原因,但[UInt8]缓冲区(甚至不包括基础库)。我认为我应该按照已经写好的方式。不知道为什么memcpy应该如此笨重? –
因为它使你使用不安全的原始指针 – Alexander