Convertir NSSsortingng en tableau de caractères

J’ai une variable de type char[] et je veux y copier la valeur NSSsortingng . Comment convertir un NSSsortingng en un tableau de caractères?

Use -[NSSsortingng UTF8Ssortingng] :

 NSSsortingng *s = @"Some ssortingng"; const char *c = [s UTF8Ssortingng]; 

Vous pouvez également utiliser -[NSSsortingng cSsortingngUsingEncoding:] si votre chaîne est codée avec autre chose que UTF-8.


Une fois que vous avez le caractère const char * , vous pouvez l’utiliser avec 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]); // Do stuff with cpy free(cpy); 
 NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i < [string length]; i++) { [array addObject:[NSString stringWithFormat:@"%C", [string characterAtIndex:i]]]; } 

La réponse de mipadi est la meilleure si vous voulez juste un char* contenant le contenu de la chaîne, cependant NSSsortingng 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 d’ unichar 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 , vous pouvez utiliser les getBytes:maxLength:usedLength:encoding:options:range:remainingRange: les plus compliqués getBytes:maxLength:usedLength:encoding:options:range:remainingRange: comme ceci (démontré dans la notation Eastern Polish Christmas Tree ):

 NSUInteger length = [str length]; NSUInteger bufferSize = 500; char buffer[bufferSize] = {0}; [str getBytes:buffer maxLength:(bufferSize - 1) usedLength:NULL encoding:NSUTF8SsortingngEncoding options:0 range:NSMakeRange(0, length) remainingRange:NULL]; 

Plutôt que getCharacters:range: j’utilise:

 [ssortingngToCopy getCSsortingng:c_buffer maxLength:c_buffer_length encoding:NSUTF8SsortingngEncoding]; 

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

Dans Swift, un tableau de caractères est ponté en tant que UnsafePointer . L’access aux caractères fonctionne de la même manière dans Swift pour un NSSsortingng :

 let str: NSSsortingng = "hello" let charStr = str.UTF8Ssortingng // UnsafePointer 

Pour un object Swift Ssortingng , les choses sont un peu différentes:

 let str = "hello" let charStr = str.cSsortingngUsingEncoding(NSUTF8SsortingngEncoding) 

charStr est [CChar]?CChar est un typeailais pour Int8 .

Nous devons jouer à NSSsortingng en tant que tableau de caractères pour travailler sur les pratiques de codage, ce qui est par ailleurs beaucoup plus simple à faire dans le codage en langage C. Utiliser characterAtIndex: et appendFormat: aide-moi. Peut-être que cela aidera.

 NSSsortingng *str = @"abcdef"; NSMutableSsortingng *strResult = [NSMutableSsortingng ssortingng]; for (NSUInteger i = 0; i < [str length]; i++) { char ch = [str characterAtIndex:i]; [strResult appendFormat:@"%c", ch]; } NSLog(@"%@", strResult);