2017-01-20 69 views
0

發生我有含16個元件UInt秒的陣列,我需要將其轉換爲16個字節的Data對象。轉換未從[UINT]數組到數據

我使用下面的代碼轉換,但它是將其轉換爲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*/ 

請糾正我,我做錯了什麼。

+0

NO。實際上它是16 * 8 = 128字節。它每個int值佔用8個字節。 – Arasuvel

+2

看來,你實際上* *想要的是一個十六進制編碼字符串轉換爲'Data'值。看看(例如)http://stackoverflow.com/questions/40276322/hex-binary-string-conversion-in-swift尋找可能的解決方案。 –

回答

3

您不能轉換16 UInt s到16個字節。甲UInt是8個字節的64位裝置上長,或32位裝置上的4個字節。你需要使用一個UInt8的數組。

如果你有UInt S作爲輸入你不能將它們轉換成UInt8一個數組,但你可以將它們轉換:

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

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

查看你的代碼,如果你重新編譯你的代碼直接構建一個'UInt8'數組將會更好。 –

+0

注意,如果你的目標是一個十六進制字符串轉換爲數據,在馬丁的評論鏈接代碼確實是更好的解決方案。 @MartinR,你應該發佈該代碼作爲答案,OP應該接受,而不是我的。這個問題實際上是一個XY問題。 –