Ich habe ein NSString
Objekt und möchte es in ein konvertieren std::string
.
Wie mache ich das in Objective-C ++?
objective-c
objective-c++
gabor
quelle
quelle
Antworten:
Bearbeiten: Lassen Sie mich nach einigen Jahren auf diese Antwort eingehen. Wie zu Recht darauf hingewiesen, werden Sie wahrscheinlich wollen die Verwendung
cStringUsingEncoding:
mit ,NSASCIIStringEncoding
wenn Sie mit am Ende gehenstd::string
. Sie können UTF-8 mit normal verwendenstd::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::string
und keine Nicht-ASCII-Zeichen enthalten soll Inhalt, und dann werfen Sie das auf IhredataUsingEncoding:allowLossyConversion:
NSData
std::string
quelle
-cStringUsingEncoding:
stattdessen API verwenden, wenn die API, mit der Sie arbeiten, beispielsweise reines ASCII oder die Systemcodepage erwartet . :)new
s sind verpönt und einstd::shared_ptr
oderstd::unique_ptr
sollte bevorzugt werden.Wie Ynau im Kommentar vorgeschlagen hat, ist es im Allgemeinen besser, alles auf dem Stapel zu belassen, anstatt Heap (mit
new
erstellt die Zeichenfolge auf dem Heap), daher (unter der Annahme einer UTF8-Codierung):quelle
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:Dies würde Sie zu einer solchen Konvertierung führen:
quelle