【问题标题】:Converting NSString to std::string将 NSString 转换为 std::string
【发布时间】:2013-03-05 15:32:00
【问题描述】:

我尝试将 NSString 传递给 C++ 函数,但我只得到第一个字母。代码如下:

#import <Foundation/Foundation.h>
#import <string>
int main(int argc, const char * argv[])
{

@autoreleasepool {
    NSString* objcString=@"test";
    std::string cppString([objcString cStringUsingEncoding:NSUnicodeStringEncoding]);
    NSLog(@"%@, %s",objcString, cppString.c_str()
          );

}
return 0;
}

它给了我:

2013-03-05 10:22:15.362 TEST[1136:353] test, t

感谢您的宝贵时间,祝您有美好的一天。

【问题讨论】:

    标签: objective-c nsstring objective-c++ stdstring


    【解决方案1】:

    编码错误。 NSUnicodeStringEncoding 返回一个 UTF-16 字符串。字符 "t, e, s, t" 适合一个字节 - 所以在 UTF-16 中,它们由一个非零字节和一个零字节表示。零告诉NSLog() 它是字符串的结尾。请改用NSUTF8StringEncoding

    【讨论】:

    • 但是,如果我想使用外来字符作为 'é',我该怎么办?
    • @user1987722 一样。 UTF-8 不是 ASCII。
    • 非常感谢!这很有帮助
    【解决方案2】:

    怎么样:

    std::string cppString([objcString UTF8String]);
    

    【讨论】:

      【解决方案3】:

      我在我的代码中普遍使用 NSUTF8Encoding 而不是 NSUnicodeEncoding

      【讨论】:

        【解决方案4】:

        我认为这个答案可能会对您有所帮助:How do I convert a NSString into a std::string?

        为了完整性:

        NSString *foo = @"Foo";
        std::string *bar = new std::string([foo UTF8String]);
        

        【讨论】:

          猜你喜欢
          • 2011-12-21
          • 2011-04-02
          • 2019-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-28
          相关资源
          最近更新 更多