如何在没有Obj-C代码的情况下将NSString转换为c ++中的CString?

时间:2012-03-03 02:03:35

标签: c++ macos

我正在尝试使用NSFullUserName函数在c ++中获取当前用户名,但它返回NSString。因此,如何在没有Obj-C代码的情况下在c ++中将NSString转换为CString

2 个答案:

答案 0 :(得分:2)

为此不使用Objective-C是绝对的愚蠢。

也就是说,您可以将NSString *转换为CFStringRef并使用CFString函数获取C字符串。您可能会发现CFStringGetLengthCFStringGetCString函数以及kCFStringEncodingUTF8常量非常有用。请记住,许多Unicode字符需要多个字节才能以UTF-8表示。

答案 1 :(得分:2)

NSStringCFString进行免费桥接(即,你可以只是强制转换指针 - 它指向的东西可以解释为任何一种类型),你可以操纵{{1}使用vanilla C调用。

因此,您通常会尝试CFStringGetCStringPtr尝试将指针作为C字符串直接指向CFString内容而不进行任何复制,然后再回到分配适当大小的C样式数组和{3}如果直接指针不可用(通常是因为您想要的编码与NSString的内部编码不匹配)。

CFStringGetCString将返回为给定编码和字符串长度分配的最大缓冲区大小,CFStringGetMaximumSizeForEncoding给定字符串的长度。

所以,例如。

NSString