将NSString转换为char数组

时间:2010-08-27 05:26:27

标签: objective-c type-conversion

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

6 个答案:

答案 0 :(得分:96)

使用-[NSString UTF8String]

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

如果您的字符串使用UTF-8以外的其他字符串编码,您也可以使用-[NSString cStringUsingEncoding:]


获得const char *之后,您可以使用chars数组来处理它:

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

如果要修改字符串,请复制:

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

答案 1 :(得分:10)

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

答案 2 :(得分:9)

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

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:(如Eastern Polish Christmas Tree表示法中所示):

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];

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:0)

在Swift中,char数组被桥接为UnsafePointer<Int8>。对于NSString

,在Swift中访问字符的方式相同
let str: NSString = "hello"
let charStr = str.UTF8String // UnsafePointer<Int8>

对于Swift String对象,情况略有不同:

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

charStr[CChar]?,其中CCharInt8的类型。

答案 5 :(得分:0)

我们需要将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);