안녕 난 표준 변환하려고 std::string
로 NSString
하지만 난 많은 행운을 가지고 있지 않다.
다음 코드 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
그 자리에서 (그리고 적절하게 #import
ed) 당신은 이제 다음을 할 수 있습니다 :
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);