gab*_*bor 91 objective-c objective-c++
我有一个NSString对象,并希望将其转换为std::string.
我如何在Objective-C++中执行此操作?
Jus*_*Sid 126
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String]);
Run Code Online (Sandbox Code Playgroud)
编辑:几年后,让我扩展这个答案.作为理所当然地指出的那样,你很可能希望使用cStringUsingEncoding:与NSASCIIStringEncoding如果你要最终使用std::string.您可以正常使用UTF-8 std::strings,但请记住,这些操作是按字节操作而不是字符甚至字形操作.要获得良好的"入门",请查看此问题及其答案.
另请注意,如果您的字符串不能表示为ASCII但仍然需要它,std::string并且您不希望其中包含非ASCII字符,则可以使用有损编码ASCII dataUsingEncoding:allowLossyConversion:来NSData表示字符串内容,然后扔到你的std::string
Mar*_*o83 50
正如Ynau在评论中所建议的那样,在一般情况下,最好将所有内容保留在堆栈而不是堆(使用new在堆上创建字符串),因此(假设UTF8编码):
NSString *foo = @"Foo";
std::string bar([foo UTF8String]);
Run Code Online (Sandbox Code Playgroud)
如philjordan.eu所述,也可能是NSString nil.在这种情况下,演员应该这样做:
//注意:如果foo为nil,这将产生一个空的C++字符串
//而不是从UTF8String中取消引用NULL指针.
这将导致您进行这样的转换:
NSString *foo = @"Foo";
std::string bar = std::string([foo UTF8String], [foo lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61151 次 |
| 最近记录: |