2009-02-04 26 views
21

He podido encontrar métodos como -[NSString stringWithCString:encoding:] pero no parecen funcionar bien cuando la cstring es un puntero.¿Cómo se convierte cstring a NSString?

+2

Funcionan perfectamente bien con los punteros, debe ser más descriptivo sobre los problemas que enfrenta. – codelogic

+0

Además, * todas las cadenas * C son punteros. Esa es la definición de una cadena C: un puntero a algunos caracteres. –

+1

En realidad, creo que está hablando de convertir CString a NSString :) –

Respuesta

35

En primer lugar, no use initWithCString, ha quedado en desuso.

par de maneras que usted puede hacer esto:

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

Si necesita otro sistema de codificación como ASCII:

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

Si quieres ver todas las codificaciones de cadena disponibles, en Xcode, mantenga comando + opción luego haga doble clic en en NSASCIIStringEncoding en el bloque de código anterior.

Podrá ver dónde Apple ha declarado su enumeración para los tipos de codificación de cadenas. Un poco más rápido que tratar de encontrarlo en la documentación.

algunos otros que pueda necesitar:

NSASCIIStringEncoding 
NSUnicodeStringEncoding // same as NSUTF16StringEncoding 
NSUTF32StringEncoding 

Pedido NSString Class Reference de Apple (codificaciones están en la parte inferior de la página)

10

stringWithCString:encoding: crea un NSString a partir de una cadena C dada. Para crear una cadena C desde un NSString, use el método UTF8String (generalmente preferido) o cStringUsingEncoding: (si necesita una codificación que no sea UTF-8).

+0

Como el método cString está en desuso, esta respuesta es mejor que la aceptada. –

+0

sí, mi mal, lo he arreglado ahora –

15

Con moderna Objective-C (desde Xcode 5 por lo menos) que sólo puede do:

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

Eso es corto y dulce. más uno para eso :) – Alix

+0

Esta es la respuesta correcta. Cuando hace una "conversión a la sintaxis objetivo-c moderna" en xcode, convierte a este formato. – izerik