나는 NSString
개체가 있고 그것을std::string
.
Objective-C ++에서 어떻게합니까?
답변:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
편집 : 몇 년 후이 답변을 확장하겠습니다. 정당하게 지적했듯이 .NET을 사용하려는 경우 cStringUsingEncoding:
with 를 사용하고 싶을 NSASCIIStringEncoding
것 std::string
입니다. normal과 함께 UTF-8을 사용할 수 std::strings
있지만 문자 또는 문자가 아닌 바이트에서 작동합니다. 좋은 "시작"을 위해이 질문과 대답을 확인하십시오 .
또한 ASCII로 표현할 수없는 문자열이 있지만 여전히에서 원하고 std::string
ASCII가 아닌 문자를 원하지 않는 경우을 사용 dataUsingEncoding:allowLossyConversion:
하여 NSData
손실 인코딩 된 ASCII가있는 문자열 표현 을 얻을 수 있습니다. 콘텐츠, 그리고 당신의std::string
-cStringUsingEncoding:
대신 사용해야 합니다. :)
new
는 눈살을 찌푸리게되며 std::shared_ptr
또는 a를 std::unique_ptr
선호해야합니다.
philjordan.eu에서 언급했듯이 NSString이 nil
. 이러한 경우 캐스트는 다음과 같이 수행되어야합니다.
// 참고 : foo가 nil이면 빈 C ++ 문자열이 생성됩니다.
// UTF8String에서 NULL 포인터를 역 참조하는 대신.
이것은 다음과 같은 전환으로 이어질 것입니다.
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);