首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将std::string转换为NSString?

如何将std::string转换为NSString?
EN

Stack Overflow用户
提问于 2010-08-24 06:30:08
回答 6查看 83.7K关注 0票数 103

您好,我正在尝试将一个标准的std::string转换成一个NSString,但我没有太多的运气。

我可以使用以下代码成功地从NSString转换为std::string

代码语言:javascript
复制
NSString *realm = @"Hollywood";
std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]];

但是,当我尝试执行以下操作时,会出现编译时错误

代码语言:javascript
复制
NSString *errorMessage = [NSString stringWithCString:REALM encoding:[NSString defaultCStringEncoding]];

我得到的错误是

代码语言:javascript
复制
Cannot convert 'std::string' to 'const char*' in argument passing

我是不是漏掉了什么?

提前谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-24 06:33:08

从std::string中获取c-string以进行转换:

代码语言:javascript
复制
NSString *errorMessage = [NSString stringWithCString:REALM.c_str() 
                                   encoding:[NSString defaultCStringEncoding]];
票数 118
EN

Stack Overflow用户

发布于 2011-09-15 09:36:28

首先,您必须使用Objective-C++来实现这一点;确保将所有*.m文件重命名为*.mm最简单方法

到目前为止,将C++ std::string添加到NSString中最有用(未弃用)的手动方法是:

代码语言:javascript
复制
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

代码语言:javascript
复制
@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编辑),您现在可以:

代码语言:javascript
复制
NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];

对于std::wstring也是如此,这非常方便。

票数 54
EN

Stack Overflow用户

发布于 2013-12-04 06:27:28

代码语言:javascript
复制
NSString* mystring = [NSString stringWithUTF8String:stdstring.c_str()];
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3552195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档