Как конвертировать std:: string в NSString?
Привет я пытаюсь преобразовать стандартный 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
Я что-то пропустил?
спасибо заранее.
6 ответов:
получить c-string из std:: 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 даст вам хороший результат для того, чтобы иметь нелатинские символы " просто работа.-
если вы делаете большее приложение, или вы не единственный, кто работает над ним, однако - вы, вероятно, хотите что-то, что легче применить.
адаптировано из cocoa-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, что более чем удобно.
У 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);
Comments