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