Objective c 如何将std::string转换为NSString?
您好,我正在尝试将标准的Objective c 如何将std::string转换为NSString?,objective-c,nsstring,objective-c++,stdstring,Objective C,Nsstring,Objective C++,Stdstring,您好,我正在尝试将标准的std::string转换为NSString,但我运气不太好 我可以使用以下代码成功地从NSString转换为std::string NSString *realm = @"Hollywood"; std::string REALM = [realm cStringUsingEncoding:[NSString defaultCStringEncoding]]; 但是,当我尝试以下操作时,会出现编译时错误 NSString *errorMessage = [NSStri
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中取出c-string进行转换:
NSString *errorMessage = [NSString stringWithCString:REALM.c_str()
encoding:[NSString defaultCStringEncoding]];
首先,您必须使用Objective-C++才能使其发挥最小的作用;确保这一点的最简单方法是将所有
*.m
文件重命名为*.mm
迄今为止,获得C++(
std::string param; // <-- input
NSString* result = [NSString stringWithUTF8String:param.c_str()];
NSString* alternative = [[NSString alloc] initWithUTF8String:param.c_str()];
有了它(并适当地导入),您现在可以:
NSString* result = [NSString stringWithstring:param];
string convertedBack = [result getstring];
对于std::wstring也一样,这非常方便。我还发现:
NSString *nsString = [NSString stringWithFormat:@"%s",standardString];
像冠军一样工作。苹果现在有了一种新的方式,他们希望你完成这一转换。在XCode7中,我使用了编辑>转换>到现代Objective C语法。。。选项来找出这一点。它使用速记@符号
NSString* mystring = [NSString stringWithUTF8String:stdstring.c_str()];
std::string sCPPString = "Hello World!";
NSString *sAppleString = @(sCPPString.c_str());
以下是代码片段/示例:
string str_simple = "HELLO WORLD";
//string to NSString
NSString *stringinObjC = [NSString stringWithCString:str_simple.c_str()
encoding:[NSString defaultCStringEncoding]];
NSLog(stringinObjC);
这一定是输入错误,但“NSString*realm=“Hollywood”中的字符串文字缺少“@”这似乎不是一个好的答案,正如文档所说:/*依赖于用户的编码,其值是从用户的默认语言和潜在的其他因素派生的。在没有其他提示的情况下,解释具有未知编码的用户文档时,有时可能需要使用此编码。这种编码应该很少使用,如果有的话。请注意,这里的一些潜在值可能会导致对甚至相当简单的NSString内容进行意外的编码转换,例如,使用双向编码的标点符号*/[NSString stringWithUTF8String:mystring.c_str()]似乎更合适,因为std::string更可能来自您自己的代码,这很可能是在UTF8中。你们知道为什么在这里()会显示“返回的对象可能与原始接收方不同”?这意味着什么?我们如何知道它是否不同?@cyrichapier如果我们的.mm文件说“没有指定特定的编码”该怎么办?这是rad,我在几个iphone项目中使用过它。我注意到的一件事是,如果我运行Apple的单元测试框架,并且测试一个使用这些方法的库,我必须在单元测试的“构建阶段”将包含字符串转换方法的文件作为“编译源”之一。是的,单元测试本质上是它自己的小程序,需要访问相同的代码。此外,实际编写测试的荣誉;-)你们知道为什么这里()写着“返回的对象可能与原始接收器不同”吗?这意味着什么?我们如何知道它是否不同?@izzyMachado文档中的这种语言通常意味着他们保留接口契约下的“权利”,以解析、清理或规范化输入字符串。i、 e.它可能不是往返的,并且仍然比较
=
,而是它们可以做出的“最接近”或“最佳”表示。本例中的接收器是NSString
类实现,返回的值不是Objective-C对象,因此它们也可能使用一些标准语言来覆盖它。您知道当我们使用initWithUTF8String并且字符串包含非utf8字符时,为什么这仍然有效吗?它如何仍然能够使用字符串(如果它是UTF-8),一旦它成为NString就打印出来,这是非常不安全的,不保证工作。Stand字符串如果是STD::String,是C++对象。C++对象对于传递给变量函数是不安全的(可变模板在C++ 11中解决这个问题)。如果它能工作,那是一个侥幸&几乎每个编译器都会至少警告您不要这样做(如果它不是一个错误的话)。这会使NSString变成UTF8吗?或者NSString是什么编码?如果这是一个愚蠢的问题,请原谅,但可以肯定的是,它能保证生成sCPPString.c_str()的副本吗进入SAPPSTRING?我的意思是,如果sCPPString超出了分数,SAPPSTRING中的内存仍然有效?还有一个关于stringWithUTF8String和stringWithCString方法的问题,第一个是复制,另一个只是引用内存缓冲区,还是两者都保证复制?(我知道第一本是复印件,但另一本呢),我只是想确定一下。谢谢。。。
string str_simple = "HELLO WORLD";
//string to NSString
NSString *stringinObjC = [NSString stringWithCString:str_simple.c_str()
encoding:[NSString defaultCStringEncoding]];
NSLog(stringinObjC);