Мне нужно кодировать строку в UTF-16LE (и конвертировать в sha1 позже), но у меня возникают некоторые проблемы. Это то, что я пробовал:Swift 3: кодировать строку в UTF-16LE
let utf16array = Array("password".utf16)
print(utf16array)
// [112, 97, 115, 115, 119, 111, 114, 100]
Но это то, что я ожидал:
// [112, 0, 97, 0, 115, 0, 115, 0, 119, 0, 111, 0, 114, 0, 100, 0]
То же самое с помощью utf8array:
let utf8array = "password".utf8.map({ $0 as UInt8 })
// [112, 97, 115, 115, 119, 111, 114, 100]
Итак, это то, что я сделал " исправить ":
var bytesArray:[UInt16] = []
for byte in utf16array {
bytesArray.append(byte)
bytesArray.append(0)
}
print(bytesArray)
// [112, 0, 97, 0, 115, 0, 115, 0, 119, 0, 111, 0, 114, 0, 100, 0]
Но я «Конечно, это не правильный путь. Какие-либо предложения?
Содержимое массива UTF-16 - это все 16-разрядные целые числа, поэтому те 0 байтов, которые вы ожидаете, уже включены в каждое значение. Вы изменили данные, вставив эти дополнительные нули (которые также составляют 16 бит). –