将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
。