从[UInt]数组到Data没有发生转换

时间:2017-01-20 12:54:48

标签: ios arrays swift

我有一个包含16个元素的UInt数组,我需要将它转换为16个字节的Data对象。

我使用下面的代码进行转换,但是它将它转换为128个字节而不是16个字节。

let numbers : stride(from: 0, to: salt.length, by: 2).map() {
        strtoul(String(chars[$0 ..< min($0 + 2, chars.count)]), nil, 16)
    }
/*numbers is a [UInt] array*/

let data = Data(buffer: UnsafeBufferPointer(start: numbers, count:number.count))
/*Data returns 128 bytes instead of 16 bytes*/

请纠正我的错误。

1 个答案:

答案 0 :(得分:3)

您无法将16 UInt转换为16个字节。 UInt在64位设备上长8个字节,在32位设备上长4个字节。您需要使用UInt8 s。

数组

如果您输入了UInt个数组作为输入,则无法将它们转换为UInt8,但您可以转换它们:

let array: [UInt] = [1, 2, 3, 123, 255]

let array8Bit: [UInt8] = array.map{UInt8($0)}