[objective-c] std :: string을 NSString으로 변환하는 방법?

안녕 난 표준 변환하려고 std::stringNSString하지만 난 많은 행운을 가지고 있지 않다.

다음 코드 NSString를 사용하여 에서으로 성공적으로 변환 할 수 있습니다.std::string

NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];

그러나 다음을 시도하면 컴파일 시간 오류가 발생합니다.

NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];

내가 얻는 오류는

Cannot convert 'std::string' to 'const char*' in argument passing

여기에 뭔가 빠졌나요?

미리 감사드립니다.



답변

변환을 위해 std :: string에서 c-string을 가져옵니다.

NSString *errorMessage = [NSString stringWithCString:REALM.c_str()
                                   encoding:[NSString defaultCStringEncoding]];


답변

첫째, 이것이 조금이라도 작동하려면 Objective-C ++를 사용해야합니다. 가장 쉬운 방법은 모든 *.m파일의 이름 을*.mm

지금까지 가장 유용한 (더 이상 사용되지 않는) 수동으로 C ++ std::string를 가져 오는 방법 NSString은 다음과 같습니다.

std::string param; // <-- input
NSString* result = [NSString stringWithUTF8String:param.c_str()];
NSString* alternative = [[NSString alloc] initWithUTF8String:param.c_str()];

이것은 대부분의 경우에 작동합니다. 특정 인코딩 감지 및 변환을 수행하지 않는 경우 UTF-8은 라틴어가 아닌 문자를 ‘그냥 작동’하는 좋은 결과를 제공합니다.

더 큰 앱을 만들고 있거나 그 앱에서 작업하는 유일한 사람이 아니라면 적용하기 더 쉬운 것을 원할 것입니다.

에서 적응 코코아-DEV 메일 링리스트 아카이브

@interface NSString (cppstring_additions)
+(NSString*) stringWithwstring:(const std::wstring&)string;
+(NSString*) stringWithstring:(const std::string&)string;
-(std::wstring) getwstring;
-(std::string) getstring;
@end

@implementation NSString (cppstring_additions)

#if TARGET_RT_BIG_ENDIAN
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32BE);
#else
const NSStringEncoding kEncoding_wchar_t = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingUTF32LE);
#endif

+(NSString*) stringWithwstring:(const std::wstring&)ws
{
    char* data = (char*)ws.data();
    unsigned size = ws.size() * sizeof(wchar_t);

    NSString* result = [[NSString alloc] initWithBytes:data length:size encoding:kEncoding_wchar_t];
    return result;
}
+(NSString*) stringWithstring:(const std::string&)s
{
    NSString* result = [[NSString alloc] initWithUTF8String:s.c_str()];
    return result;
}

-(std::wstring) getwstring
{
    NSData* asData = [self dataUsingEncoding:kEncoding_wchar_t];
    return std::wstring((wchar_t*)[asData bytes], [asData length] / sizeof(wchar_t));
}
-(std::string) getstring
{
    return [self UTF8String];
}

@end

그 자리에서 (그리고 적절하게 #imported) 당신은 이제 다음을 할 수 있습니다 :

NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];

그리고에도 똑같이 std::wstring편리합니다.


답변

NSString* mystring = [NSString stringWithUTF8String:stdstring.c_str()];


답변

이제 Apple은이 변환을 수행하기를 원하는 새로운 방법을 제공합니다. XCode7에서는 편집> 변환> 현대 목표 C 구문으로 … 옵션을 사용하여이를 알아 냈습니다. 속기 @ 기호를 사용합니다.

std::string sCPPString = "Hello World!";
NSString *sAppleString = @(sCPPString.c_str());


답변

또한 다음을 발견했습니다.

NSString *nsString = [NSString stringWithFormat:@"%s",standardString];

챔피언처럼 작동합니다.


답변

다음은 코드 조각 / 예입니다.

string str_simple = "HELLO WORLD";

//string to NSString
NSString *stringinObjC = [NSString stringWithCString:str_simple.c_str()
                                encoding:[NSString defaultCStringEncoding]];
NSLog(stringinObjC);


답변