2010-08-27 42 views

Trả lời

88

Sử dụng -[NSString UTF8String]:

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

Bạn cũng có thể sử dụng -[NSString cStringUsingEncoding:] nếu chuỗi của bạn được mã hóa với một cái gì đó khác hơn là UTF-8.


Khi bạn có const char *, bạn có thể làm việc với nó tương tự như một mảng của chars:

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

Nếu bạn muốn thay đổi chuỗi, tạo một bản sao:

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

Anh ấy yêu cầu mảng char là một ký tự const – JonasG

+1

@Maxner: Đó là con trỏ * tới chuỗi ký tự const. – mipadi

+0

Im tìm kiếm một câu trả lời hoàn chỉnh cho thấy mã từ 'NSString * someString' đến' char myArray [] = .. '.Tôi thực sự cần điều này, bạn có thể vui lòng cập nhật câu trả lời của bạn? chúc mừng – JonasG

9

Câu trả lời của mipadi là tốt nhất nếu bạn chỉ muốn char* chứa nội dung của chuỗi, tuy nhiên NSString cung cấp các phương thức để lấy dữ liệu vào một vùng đệm bạn đã tự phân bổ. Ví dụ, bạn có thể sao chép các nhân vật vào một mảng của unichar sử dụng getCharacters:range: như thế này:

NSUInteger length = [str length]; 
unichar buffer[length]; 

[str getCharacters:buffer range:NSMakeRange(0, length)]; 

for (NSUInteger i = 0; i < length; i++) 
{ 
    doSomethingWithThis(buffer[i]); 
} 

Nếu bạn phải sử dụng char, sau đó bạn có thể sử dụng phức tạp hơn getBytes:maxLength:usedLength:encoding:options:range:remainingRange: như thế này (chứng minh trong Eastern Polish Christmas Tree ký hiệu):

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

Thay vì getCharacters:range:, tôi sử dụng:

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

Kết quả là char [] (thay vì unichar []), đó là những gì OP mong muốn và những gì bạn có thể muốn sử dụng để tương thích với C.

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

Trong Swift, mảng char được bắc cầu là UnsafePointer<Int8>. Truy cập vào các nhân vật hoạt động theo cách tương tự trong Swift cho một NSString:

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

Đối với một Swift String đối tượng thứ có một chút khác biệt:

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

charStr[CChar]? nơi CChar là một typeailais cho Int8.

0

Chúng ta cần chơi NSString như một mảng ký tự để làm việc trên các thực hành mã hóa, đơn giản hơn nhiều khi thực hiện trong mã hóa C thuần túy. Sử dụng ký tựAtIndex:appendFormat: giúp tôi. Có thể điều này sẽ giúp.

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

khác biệt giữa câu trả lời của bạn và .... NSMutableString * strResult = [NSMutableString stringWithString: str]; ? – greenhouse

Các vấn đề liên quan