2009-02-04 19 views
21

Sono stato in grado di trovare metodi come -[NSString stringWithCString:encoding:] ma non sembrano funzionare bene quando la cstring è un puntatore.Come si converte la cstring in NSString?

+2

Funzionano perfettamente con i puntatori, è necessario essere più descrittivi sui problemi che si affrontano. – codelogic

+0

Inoltre, le stringhe * all * C sono puntatori. Questa è la definizione di una stringa C: un puntatore ad alcuni caratteri. –

+1

In realtà penso che stai parlando di convertire CString in NSString :) –

risposta

35

Per prima cosa, non utilizzare initWithCString, è stato deprecato.

paio di modi si può fare questo:

const *char cString = "Hello"; 
NSString *myNSString = [NSString stringWithUTF8String:cString]; 

Se avete bisogno di un'altra codifica come ASCII:

const *char cString = "Hello"; 
NSString *myNSString = [NSString stringWithCString:cString encoding:NSASCIIStringEncoding]; 

Se volete vedere tutte le codifiche stringa disponibili, in Xcode, tenere comando + opzione quindi fare doppio clic su su NSASCIIStringEncoding nel precedente blocco di codice.

Si sarà in grado di vedere dove Apple ha dichiarato la propria enumerazione per i tipi di codifica delle stringhe. Bit più veloce di cercare di trovarlo nella documentazione.

alcuni altri potrebbe essere necessario:

NSASCIIStringEncoding 
NSUnicodeStringEncoding // same as NSUTF16StringEncoding 
NSUTF32StringEncoding 

Cassa di Apple NSString Class Reference (codifiche sono in fondo alla pagina)

10

stringWithCString:encoding: crea un NSString da una determinata stringa C. Per creare una stringa C da una NSString, utilizzare il metodo UTF8String (generalmente preferito) o cStringUsingEncoding: (se è necessaria una codifica diversa da UTF-8).

+0

Poiché il metodo cString è deprecato, questa risposta è migliore di quella accettata. –

+0

sì mio male, ho risolto questo ora –

15

Con moderno Objective-C (dal Xcode 5 almeno) si può solo do:

char const* cString = "Hello"; 
NSString *myNSString = @(cString); 
+0

Questo è breve e dolce. più uno per quello :) – Alix

+0

Questa è la risposta corretta. Quando si esegue una "conversione in sintassi oggettivo-c moderna" in xcode, viene convertito in questo formato. – izerik

Problemi correlati