[objective-c] NSString을 std :: string으로 어떻게 변환합니까?

나는 NSString개체가 있고 그것을std::string .

Objective-C ++에서 어떻게합니까?



답변

NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);

편집 : 몇 년 후이 답변을 확장하겠습니다. 정당하게 지적했듯이 .NET을 사용하려는 경우 cStringUsingEncoding:with 를 사용하고 싶을 NSASCIIStringEncodingstd::string입니다. normal과 함께 UTF-8을 사용할 수 std::strings있지만 문자 또는 문자가 아닌 바이트에서 작동합니다. 좋은 “시작”을 위해이 질문과 대답을 확인하십시오 .

또한 ASCII로 표현할 수없는 문자열이 있지만 여전히에서 원하고 std::stringASCII가 아닌 문자를 원하지 않는 경우을 사용 dataUsingEncoding:allowLossyConversion:하여 NSData손실 인코딩 된 ASCII가있는 문자열 표현 을 얻을 수 있습니다. 콘텐츠, 그리고 당신의std::string


답변

Ynau가 주석에서 제안했듯이 일반적으로 힙 대신 스택에 모든 것을 유지하는 것이 좋습니다 (사용하여 힙 new에 문자열 생성), 따라서 (UTF8 인코딩 가정).

NSString *foo = @"Foo";
std::string bar([foo UTF8String]);


답변

philjordan.eu에서 언급했듯이 NSString이 nil. 이러한 경우 캐스트는 다음과 같이 수행되어야합니다.

// 참고 : foo가 nil이면 빈 C ++ 문자열이 생성됩니다.

// UTF8String에서 NULL 포인터를 역 참조하는 대신.

이것은 다음과 같은 전환으로 이어질 것입니다.

NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);


답변