将NSString转换为char数组

我有一个types为char[]的variables,我想在其中复制NSString值。 如何将NSString转换为char数组?

使用-[NSString UTF8String]

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

你也可以使用-[NSString cStringUsingEncoding:]如果你的string是用非UTF-8编码的。


一旦你有了const char * ,你可以像使用一个chars数组一样使用它:

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

如果要修改string,请复制一份:

 char *cpy = calloc([s length]+1, 1); strncpy(cpy, c, [s length]); // Do stuff with cpy free(cpy); 

mipadi的答案是最好的,如果你只是想要一个char*包含string的内容,但是NSString提供了获取数据到你自己分配的缓冲区的方法。 例如,您可以使用getCharacters:range:将字符复制到unichar数组中getCharacters:range:如下所示:

 NSUInteger length = [str length]; unichar buffer[length]; [str getCharacters:buffer range:NSMakeRange(0, length)]; for (NSUInteger i = 0; i < length; i++) { doSomethingWithThis(buffer[i]); } 

如果必须使用char ,那么可以使用更复杂的getBytes:maxLength:usedLength:encoding:options:range:remainingRange:像这样(在波兰东部的圣诞树表示法中演示):

 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]; 
 NSMutableArray *array = [NSMutableArray array]; for (int i = 0; i < [string length]; i++) { [array addObject:[NSString stringWithFormat:@"%C", [string characterAtIndex:i]]]; } 

而不是getCharacters:range: ,我使用:

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

结果是一个char [] (而不是unichar [] ),这是OP想要的,以及你可能想用于C兼容性。

我们需要将NSString作为字符数组来处理编码实践,否则在简单的C编码中要简单得多。 使用characterAtIndex:appendFormat:帮助我。 可能会有所帮助。

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

在Swift中,char数组被桥接为UnsafePointer<Int8> 。 在Swift中访问字符的方式与NSString

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

对于一个Swift的String对象,情况有些不同:

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

charStr[CChar]? 其中CChar是Int8的Int8