55 votes

Convertir NSString en un tableau de caractères

J'ai une variable de type char[] et je veux copier la valeur NSString dedans. Comment puis-je convertir un NSString en un tableau de caractères (char array) ?

104voto

mipadi Points 135410

Utilisez -[NSString UTF8String]:

NSString *s = @"Some string";
const char *c = [s UTF8String];

Vous pouvez également utiliser -[NSString cStringUsingEncoding:] si votre chaîne est encodée avec autre chose que UTF-8.


Une fois que vous avez le const char *, vous pouvez travailler avec de manière similaire à un tableau de chars:

printf("%c\n", c[5]);

Si vous souhaitez modifier la chaîne, faites une copie:

char *cpy = calloc([s length]+1, 1);
strncpy(cpy, c, [s length]);
// Faire quelque chose avec cpy
free(cpy);

7 votes

Il a demandé un tableau de caractères c'est un const char

0 votes

Je recherche une réponse complète qui montre le code de NSString *someString à char myArray[] =... J'ai vraiment besoin de cela, pourriez-vous s'il vous plaît mettre à jour votre réponse? Merci

0 votes

@ Maxner: De quoi as-tu besoin de faire ? Dans la plupart des cas, un pointeur vers des caractères peut être utilisé comme un tableau de caractères.

14voto

dreamlax Points 47152

La réponse de mipadi est la meilleure si vous voulez simplement un char* contenant le contenu de la chaîne, cependant NSString fournit des méthodes pour obtenir les données dans un tampon que vous avez alloué vous-même. Par exemple, vous pouvez copier les caractères dans un tableau de unichar en utilisant getCharacters:range: comme ceci :

NSUInteger length = [str length];
unichar buffer[length];

[str getCharacters:buffer range:NSMakeRange(0, length)];

for (NSUInteger i = 0; i < length; i++)
{
    doSomethingWithThis(buffer[i]);
}

Si vous devez utiliser char, alors vous pouvez utiliser la méthode plus compliquée getBytes:maxLength:usedLength:encoding:options:range:remainingRange: comme ceci (démontré dans la notation du sapin de Noël Polonais de l'Est) :

NSUInteger length = [str length];
NSUInteger bufferSize = 500;

char buffer[bufferSize] = {0};

[str       getBytes:buffer
          maxLength:(bufferSize - 1)
         usedLength:NULL
           encoding:NSUTF8StringEncoding
            options:0
              range:NSMakeRange(0, length)
     remainingRange:NULL];

10voto

adjwilli Points 4477
NSMutableArray *array = [NSMutableArray array]; 
pour (int i = 0; i < [string length]; i++) { 
[array addObject:[NSString stringWithFormat:@"%C", [string characterAtIndex:i]]]; 
}

3voto

DefenestrationDay Points 1110

Au lieu de getCharacters:range:, j'utilise:

[stringToCopy getCString:c_buffer maxLength:c_buffer_length encoding:NSUTF8StringEncoding];

Le résultat est un char[] (au lieu de unichar[]), ce que l'auteur de la question voulait, et ce que vous souhaitez probablement utiliser pour la compatibilité C.

0voto

JAL Points 3432

En Swift, un tableau de caractères est converti en UnsafePointer. Accéder aux caractères fonctionne de la même manière en Swift pour un NSString:

let str: NSString = "hello"
let charStr = str.UTF8String // UnsafePointer

Pour un objet String en Swift, les choses sont un peu différentes:

let str = "hello"
let charStr = str.cStringUsingEncoding(NSUTF8StringEncoding)

charStr est de type [CChar]?CChar est un alias pour Int8.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X