我在Swift中找不到这个问题的解决方案(它们都是Objective-C,并且它们处理的指针我认为在Swift中不会以相同的形式存在)。有没有什么方法可以将NSData
对象转换为字节数组,格式为[Uint8]
在斯威夫特?
发布于 2015-08-05 09:19:58
如果以稍微复杂的方式遍历指针,或者通过新的Array
Swift 3中引入的构造函数:
斯威夫特 3
let data = "foo".data(using: .utf8)!
// new constructor:
let array = [UInt8](data)
// …or old style through pointers:
let array = data.withUnsafeBytes {
[UInt8](UnsafeBufferPointer(start: $0, count: data.count))
}
斯威夫特2
Array(UnsafeBufferPointer(start: UnsafePointer(data.bytes), count: data.length))
发布于 2017-08-22 17:07:16
Swift 5解决方案
数据到字节数
extension Data {
var bytes: [UInt8] {
return [UInt8](self)
}
}
字节数到数据
extension Array where Element == UInt8 {
var data: Data {
return Data(self)
}
}
发布于 2016-10-08 03:58:52
这很有趣,但存在更简单的解决方案。当然可以在Swift 3中工作。我今天用了这个。
data: Data // as function parameter
let byteArray = [UInt8](data)
这就是全部!:) NSData很容易桥接到数据。
更新:(由Andrew Koster评论)
Swift 4.1,Xcode 9.3.1
刚刚被重新检查过-所有的工作都像预期的那样。
if let nsData = NSData(base64Encoded: "VGVzdFN0cmluZw==", options: .ignoreUnknownCharacters) {
let bytes = [UInt8](nsData as Data)
print(bytes, String(bytes: bytes, encoding: .utf8))
输出:84、101、115、116、83、116、114、105、110、103
可选(“TestString”)
https://stackoverflow.com/questions/31821709
复制相似问题