2009-02-04 14 views
21

Byłem w stanie znaleźć metody takie jak -[NSString stringWithCString:encoding:], ale nie wydają się grać dobrze, gdy cstring jest wskaźnikiem.Jak przekonwertować cstring na NSString?

+2

Działają idealnie dobrze ze wskaźnikami, musisz być bardziej opisowy w kwestiach, z którymi mierzysz. – codelogic

+0

Co więcej, * wszystkie * C struny są wskaźnikami. To jest definicja łańcucha C: wskaźnik do niektórych znaków. –

+1

Właściwie myślę, że mówisz o konwersji CString na NSString :) –

Odpowiedz

35

Po pierwsze, nie używaj initWithCString, został przestarzały.

Kilka sposobów można to zrobić:

const *char cString = "Hello"; 
NSString *myNSString = [NSString stringWithUTF8String:cString]; 

Jeśli potrzebujesz innego kodowania jak ASCII:

const *char cString = "Hello"; 
NSString *myNSString = [NSString stringWithCString:cString encoding:NSASCIIStringEncoding]; 

Jeśli chcesz zobaczyć wszystkie kodowania strunowe dostępne w Xcode, przytrzymaj polecenie + opcja następnie kliknij dwukrotnie na NSASCIIStringEncoding w powyższym bloku kodu.

Będzie można zobaczyć, gdzie Apple zadeklarowało wyliczenie dla typów kodowania ciągów. Trochę szybciej niż próbując znaleźć to w dokumentacji.

niektórych innych te, które mogą być potrzebne:

NSASCIIStringEncoding 
NSUnicodeStringEncoding // same as NSUTF16StringEncoding 
NSUTF32StringEncoding 

Zamówienie Apple NSString Class Reference (kodowania są na dole strony)

10

stringWithCString:encoding: tworzy NSString z danego ciągu C. Aby utworzyć łańcuch C z NSString, użyj metody UTF8String (zazwyczaj preferowanej) lub cStringUsingEncoding: (jeśli potrzebujesz kodowania innego niż UTF-8).

+0

Ponieważ metoda cString jest przestarzała, ta odpowiedź jest lepsza niż akceptowana. –

+0

tak źle, naprawiłem to teraz –

15

Z nowoczesnym Objective-C (od Xcode 5 co najmniej) można po prostu do:

char const* cString = "Hello"; 
NSString *myNSString = @(cString); 
+0

To jest krótkie i słodkie. plus jeden za to :) – Alix

+0

To jest poprawna odpowiedź. Kiedy zrobisz "przekonwertować na nowoczesną składnię c-cel" w xcode, konwertuje do tego formatu. – izerik