Antworten:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Bearbeiten: Lassen Sie mich nach einigen Jahren auf diese Antwort eingehen. Wie zu Recht darauf hingewiesen, werden Sie wahrscheinlich wollen die Verwendung cStringUsingEncoding:mit , NSASCIIStringEncodingwenn Sie mit am Ende gehen std::string. Sie können UTF-8 mit normal verwenden std::strings, aber denken Sie daran, dass diese mit Bytes und nicht mit Zeichen oder sogar Graphemen arbeiten. Schauen Sie sich diese Frage und ihre Antwort an , um einen guten Einstieg zu erhalten .
Beachten Sie außerdem, dass Sie eine Darstellung der Zeichenfolge mit verlustbehaftet codiertem ASCII verwenden können, wenn Sie eine Zeichenfolge haben, die nicht als ASCII dargestellt werden kann, diese aber dennoch in einer Zeichenfolge enthalten soll std::stringund keine Nicht-ASCII-Zeichen enthalten soll Inhalt, und dann werfen Sie das auf IhredataUsingEncoding:allowLossyConversion:NSDatastd::string
-cStringUsingEncoding:stattdessen API verwenden, wenn die API, mit der Sie arbeiten, beispielsweise reines ASCII oder die Systemcodepage erwartet . :)
news sind verpönt und ein std::shared_ptroder std::unique_ptrsollte bevorzugt werden.
Wie auf philjordan.eu vermerkt, könnte es auch sein, dass der NSString ist nil. In einem solchen Fall sollte die Besetzung folgendermaßen erfolgen:
// HINWEIS: Wenn foo null ist, wird eine leere C ++ - Zeichenfolge erzeugt
// anstatt den NULL-Zeiger von UTF8String zu dereferenzieren.
Dies würde Sie zu einer solchen Konvertierung führen:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);