您好,我正在尝试将一个标准的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
我是不是漏掉了什么?
提前谢谢。
发布于 2010-08-24 06:33:08
从std::string中获取c-string以进行转换:
NSString *errorMessage = [NSString stringWithCString:REALM.c_str()
encoding:[NSString defaultCStringEncoding]];
发布于 2011-09-15 09:36:28
首先,您必须使用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
也是如此,这非常方便。
发布于 2013-12-04 06:27:28
NSString* mystring = [NSString stringWithUTF8String:stdstring.c_str()];
https://stackoverflow.com/questions/3552195
复制相似问题