【发布时间】:2016-11-29 06:52:34
【问题描述】:
我正在尝试将 Swift [UInt8] 缓冲区复制到 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]来模拟字节流。它内置了用于制作副本的初始化程序。如果您提供更多有关如何获取这些字节以及您想对它们做什么的上下文,我可以帮助您。 -
我只是想向现有的 cURL Swift 库添加一些功能。而且他们出于某种原因不使用数据(NSData),而是使用 [UInt8] 缓冲区(甚至不包括 Foundation 库)。我想我应该按照它已经写的方式。不知道为什么 memcpy 会这么笨重?
-
因为它会让你使用不安全的原始指针