Arrays 有没有一种方法可以;铸造;未经复制就将数据发送到[UInt8](字节数组),或者这样做不安全?
我知道我能行Arrays 有没有一种方法可以;铸造;未经复制就将数据发送到[UInt8](字节数组),或者这样做不安全?,arrays,swift,byte,nsdata,Arrays,Swift,Byte,Nsdata,我知道我能行 //Setup let originalBytes: [UInt8] = [0x0, 0x1, 0x2] let originalData = Data(originalBytes) //This let getByteArFromData: [UInt8] = [UInt8](originalData) 现在,我很确定getByteArFromData会将字节复制到新分配的内存中(这里我错了吗?) 随着数据的扩展(如图像、编解码器操作等),这会变得昂贵 我之所以想问这个问题,
//Setup
let originalBytes: [UInt8] = [0x0, 0x1, 0x2]
let originalData = Data(originalBytes)
//This
let getByteArFromData: [UInt8] = [UInt8](originalData)
现在,我很确定getByteArFromData
会将字节复制到新分配的内存中(这里我错了吗?)
随着数据的扩展(如图像、编解码器操作等),这会变得昂贵
我之所以想问这个问题,是因为我想通过一个类似数组的接口来操作数据,但据我所知,不安全的API是一条出路。所以
使用不安全的API是实现这一点的唯一方法吗?这是推荐的方法吗
我也玩过一些指针算法(只是进入了不安全的API,不确定如果我可以使用类似数组的接口,我是否应该投入时间)
以下是一些操场守则(如果您愿意,请评论并回答评论中的问题):
不需要强制转换数据,因为它支持在给定索引处访问
UInt8
顺便说一句,它还支持isEmpty
,因此不需要检查count是否为0
var data = Data(repeating: 0, count: 5)
data.indices.forEach { data[$0] = UInt8($0) }
print(data[2])
不需要强制转换数据,因为它支持在给定索引处访问
UInt8
顺便说一句,它还支持isEmpty
,因此不需要检查count是否为0
var data = Data(repeating: 0, count: 5)
data.indices.forEach { data[$0] = UInt8($0) }
print(data[2])
数据
是一个(随机访问)集合
,因此已经有了一个“类似数组的界面”。您到底为什么想要一个数组
?它做了什么,数据
还没有做的事情?好吧,现在我知道数据有下标访问,什么都没有!对于个人项目,我正在编写一个程序,将VideoToolbox生成的H.264 AVCC数据转换为H.264 AVCC附录B。为此,我必须重写每个数据块之前的字节。数据
是一个(随机访问)集合
,因此已经有了一个“类似数组的接口”.您到底为什么需要数组
?它做了什么,数据
还没有做的事情?好吧,现在我知道数据有下标访问,什么都没有!对于个人项目,我正在编写一个程序,将VideoToolbox生成的H.264 AVCC数据转换为H.264 AVCC附录B。我必须重写每个数据块之前的字节才能做到这一点。不是“偶然”,而是(随机访问)集合合规性的一部分:)不是“偶然”,而是(随机访问)的一部分集合一致性:)