将数组变量转换为 Swift 中的数据
Convert Array-looking variable to Data in Swift
我想将一个(至少我认为)UInt8 值数组转换为数据。
使用 Data(bytes: variable) 在这里不起作用。
这是变量的类型:
po type(of: obj.variable)
(Swift.UInt8, Swift.UInt8, Swift.UInt8, Swift.UInt8)
这似乎不是一个 UInt8 数组,但它是什么类型,我如何将它转换为数据?
谢谢!
obj
的类型是四个 UInt8
值的元组。
您可以按如下方式访问元组的元素:
let obj: (UInt8, UInt8, UInt8, UInt8) = (2, 4, 6, 8) // let obj be a tuple of four UInt8 values
obj.0 // 2
obj.1 // 4
由于 Data
实际上是一个 Collection
字节,它可以从一系列 UInt8
值中初始化。
所以最简单的解决方案就是从元组的元素创建一个 Array
并从中初始化一个 Data
值:
let data = Data([obj.0, obj.1, obj.2, obj.3])
但这不是最通用的解决方案,只有当元组只包含 UInt8
个值时才有效。
一种更通用的方法是先将元组转换为 UnsafePointer
,然后从中创建一个 Data
值:
let data = withUnsafePointer(to: &obj) { ptr -> Data in
return Data(bytes: ptr, count: MemoryLayout.size(ofValue: obj)
}
我想将一个(至少我认为)UInt8 值数组转换为数据。
使用 Data(bytes: variable) 在这里不起作用。
这是变量的类型:
po type(of: obj.variable)
(Swift.UInt8, Swift.UInt8, Swift.UInt8, Swift.UInt8)
这似乎不是一个 UInt8 数组,但它是什么类型,我如何将它转换为数据?
谢谢!
obj
的类型是四个 UInt8
值的元组。
您可以按如下方式访问元组的元素:
let obj: (UInt8, UInt8, UInt8, UInt8) = (2, 4, 6, 8) // let obj be a tuple of four UInt8 values
obj.0 // 2
obj.1 // 4
由于 Data
实际上是一个 Collection
字节,它可以从一系列 UInt8
值中初始化。
所以最简单的解决方案就是从元组的元素创建一个 Array
并从中初始化一个 Data
值:
let data = Data([obj.0, obj.1, obj.2, obj.3])
但这不是最通用的解决方案,只有当元组只包含 UInt8
个值时才有效。
一种更通用的方法是先将元组转换为 UnsafePointer
,然后从中创建一个 Data
值:
let data = withUnsafePointer(to: &obj) { ptr -> Data in
return Data(bytes: ptr, count: MemoryLayout.size(ofValue: obj)
}