2016-06-17 23 views
21

So che ci sono un po 'di domande pre-Swift3 riguardanti le cose di NSData. Sono curioso di sapere come passare da Swift3 String a un codice utf8 codificato (con o senza terminazione null) a Swift3 oggetto.Metodo Swift 3 per creare dati codificati utf8 da String

Il migliore che è venuta in mente finora è:

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

Avere a che fare l'intermedio Array() costruzione sembra sbagliato.

risposta

52

E 'semplice:

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

Se si vuole risolvere il data con null, semplicemente append uno 0 ad esso. Oppure si può chiamare cString(using:)

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

che è perfetto, grazie. In modo divertente, il metodo 'cString' restituisce un' [UInt8] ' –

+0

Se questo risponde alla tua domanda in modo soddisfacente, contrassegnalo come risposta corretta. Questo incoraggia di più nella comunità a rispondere alle tue domande e assicura che quando altri utenti incappano in questa pagina con la stessa domanda, possono facilmente trovare la risposta corretta. –

2

NSString metodi da NSFoundation quadro dovrebbe essere abbandonato in favore di equivalenti Swift libreria standard. I dati possono essere inizializzati con qualsiasi Sequence quali elementi sono UInt8. String.UTF8View soddisfa questo requisito.

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

Non esiste una rappresentazione di dati terminata null di una stringa. La terminazione null della stringa è un dettaglio di implementazione del linguaggio C e non dovrebbe fuoriuscire all'esterno.

Se avete intenzione di lavorare con le API C, si prega di dare un'occhiata al seguente proprietà di String Tipo:

public var utf8CString: ContiguousArray<CChar> { get } 
Problemi correlati