如何将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 

我在这里错过了什么?

提前致谢。

从std :: string中获取cstring进行转换:

 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 

在原地(和适当的#import编辑)你现在可以:

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

std::wstring ,这比方便。

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

苹果现在有一个新的方式,他们希望你做这个转换。 在XCode7中,我使用了Edit> Convert> To Modern Objective C Syntax …选项来查找。 它使用简写@符号。

 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);