2010-08-27 118 views

回答

88

使用-[NSString UTF8String]

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

你也可以使用-[NSString cStringUsingEncoding:]如果你的字符串與UTF-8以外的其他東西進行編碼。


一旦你的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); 
+4

他要求一個char數組這是一個const char – JonasG 2012-03-21 14:39:34

+1

@Maxner:這是一個*指針,指向一個常量字符串。 – mipadi 2012-03-21 14:50:06

+0

我正在尋找一個完整的答案,顯示從'NSString * someString'到'char myArray [] = ..'的代碼。我真的需要這個,你能否更新你的答案?歡呼聲 – JonasG 2012-03-21 17:40:00

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

不是getCharacters:range:,我使用:

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

結果是一個char [](而不是unichar []),這是OP想要的,以及您可能想要用於C兼容性。

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

在Swift中,字符數組被橋接爲UnsafePointer<Int8>。訪問角色的工作原理相同的方式在斯威夫特爲NSString

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

對於斯威夫特String對象的事情有一點不同:

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

charStr[CChar]?其中CCharInt8一個typeailais。

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); 
+1

什麼是你的答案和....之間的區別。NSMutableString * strResult = [NSMutableString stringWithString:str]; ? – greenhouse 2018-02-13 07:10:58