2016-06-17 37 views
21

'dan utf8 kodlu Veri oluşturmak için NSData dosyalarıyla ilgili bir sürü Swift3 sorusu olduğunu biliyorum. Swift3 Data nesnesine kodlanmış bir utf8'e (boş sonlandırma olsun veya olmasın) bir Swift3 String arasında nasıl gidileceğini merak ediyorum. Swift 3 yöntem, String

Ben şimdiye kadar ile geldim iyi

geçerli: orta Array() inşaat yapmak zorunda

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

yanlış geliyor.

cevap

52

Çok basit:

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

ona null data, basitçe append 0 sonlandırmak istiyorum. NSFoundation çerçeve Swift Standart Kütüphane karşılıklarını lehine bırakılmaz dan Yoksa cString(using:)

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

sayesinde. Eğlenceli bir şekilde, 'cString' yöntemi bir '[UInt8]' –

+0

döndürür. Bu, sorunuzu tatmin edici bir şekilde yanıtladıysa, lütfen doğru cevap olarak işaretleyin. Bu, toplumda sorularınızı cevaplamak için daha fazla teşvik eder ve diğer kullanıcıların aynı soruyu bu sayfaya yönlendirdiğinde, doğru cevabı kolayca bulabilmelerini sağlar. –

2

NSString yöntemlerini çağırabilir. Veriler, numaralı UInt8 olan öğelerle başlatılabilir. String.UTF8View bu gereksinimi karşılar.

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

boş bir dize veri temsilini sonlandırıldı diye bir şey yoktur. Dize boş sonlandırma C dilinin bir uygulama detayıdır ve dışarıda sızmaması gerekir. C API'leri ile çalışmak planlıyorsanız

, bir String Çeşidi aşağıdaki özelliği bakmak alın:

mükemmel
public var utf8CString: ContiguousArray<CChar> { get }