您好我正在尝试将标准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
我在这里错过了什么吗?
提前致谢。
答案 0 :(得分:98)
从std :: string中获取c-string以进行转换:
NSString *errorMessage = [NSString stringWithCString:REALM.c_str()
encoding:[NSString defaultCStringEncoding]];
答案 1 :(得分:47)
首先,你必须使用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 mailing list archives
@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
,这非常方便。
答案 2 :(得分:19)
NSString* mystring = [NSString stringWithUTF8String:stdstring.c_str()];
答案 3 :(得分:13)
Apple现在有了一种他们希望您进行此转换的新方式。在XCode7中,我使用了Edit&gt;转换&gt;到现代Objective C语法...找到它的选项。它使用简写@符号。
std::string sCPPString = "Hello World!";
NSString *sAppleString = @(sCPPString.c_str());
答案 4 :(得分:3)
我也发现:
NSString *nsString = [NSString stringWithFormat:@"%s",standardString];
像冠军一样工作。
答案 5 :(得分:2)
以下是代码段/示例:
string str_simple = "HELLO WORLD";
//string to NSString
NSString *stringinObjC = [NSString stringWithCString:str_simple.c_str()
encoding:[NSString defaultCStringEncoding]];
NSLog(stringinObjC);