Подтвердить что ты не робот

Метод Swift 3 для создания данных, закодированных utf8 из строки

Я знаю, что есть куча вопросов до Swift3 относительно материала NSData. Мне любопытно, как перейти между Swift3 String в кодировку utf8 (с нулевым завершением или без) для объекта Swift3 Data.

Лучшее, что я придумал до сих пор:

let input = "Hello World"
let terminatedData = Data(bytes: Array(input.nulTerminatedUTF8))
let unterminatedData = Data(bytes: Array(input.utf8))

Выполнение промежуточной конструкции Array() кажется неправильным.

4b9b3361

Ответ 1

Это просто:

let input = "Hello World"
let data = input.data(using: .utf8)!

Если вы хотите завершить data нулевым, просто append a 0. Или вы можете позвонить cString(using:)

let cString = input.cString(using: .utf8)! // null-terminated

Ответ 2

NSString методы из структуры NSFoundation следует отбросить в пользу эквивалентов стандартной библиотеки Swift. Данные могут быть инициализированы любым Sequence, элементами которого являются UInt8. String.UTF8View удовлетворяет этому требованию.

let input = "Hello World"
let data = Data(input.utf8)
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]

Нет такой вещи, как представление данных строки с нулевым завершением. Строковое нулевое завершение - это детали реализации языка C, и он не должен течь снаружи.

Если вы планируете работать с C API-интерфейсами, посмотрите следующее свойство String:

public var utf8CString: ContiguousArray<CChar> { get }