首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift中到[Uint8]的NSData

Swift中到[Uint8]的NSData
EN

Stack Overflow用户
提问于 2015-08-05 08:53:08
回答 7查看 71.7K关注 0票数 81

我在Swift中找不到这个问题的解决方案(它们都是Objective-C,并且它们处理的指针我认为在Swift中不会以相同的形式存在)。有没有什么方法可以将NSData对象转换为字节数组,格式为[Uint8]在斯威夫特?

EN

回答 7

Stack Overflow用户

发布于 2015-08-05 09:19:58

如果以稍微复杂的方式遍历指针,或者通过新的ArraySwift 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))
票数 122
EN

Stack Overflow用户

发布于 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)
    }
}
票数 54
EN

Stack Overflow用户

发布于 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”)

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31821709

复制
相关文章

相似问题

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