我想使用NSFullUserName
函数在C++中获取当前用户名,但它返回NSString
。因此,如何在不使用Obj-C代码的情况下将NSString
转换为c + +中的CString
?如何在不使用Obj-C代码的情况下将NSString转换为C++中的CString?
0
A
回答
2
NSString
免费桥接CFString
(也就是说,您只需投下指针 - 它指向的内容可以被解释为两种类型之一),并且您可以使用vanilla C调用操作CFString
。
所以你通常试图CFStringGetCStringPtr
尝试直接获得一个指向NSString
内容为C字符串没有任何复制,然后回落的分配,如果直接指针ISN合适尺寸的C数组和CFStringGetCString
” t可用(通常是因为您想要的编码与NSString
的内部编码不匹配)。
CFStringGetMaximumSizeForEncoding
将返回给定的编码和字符串长度所需的缓冲区的最大大小,CFStringGetLength
给定字符串的长度。
因此,例如,
void Class::DoSomethingWithObjCString(NSString *objcString)
{
CFStringRef string = (CFStringRef)objcString;
const char *bytes = CFStringGetCStringPtr(string, kCFStringEncodingUTF8);
if(bytes)
DoSomethingWithUTF8String(bytes);
else
{
size_t sizeToAllocate =
CFStringGetMaximumSizeForEncoding(
CFStringGetLength(string), kCFStringEncodingUTF8);
char *allocatedBytes = new char[sizeToAllocate];
CFStringGetCString(string,
allocatedBytes,
sizeToAllocate,
kCFStringEncodingUTF8);
DoSomethingWithUTF8String(allocatedBytes);
delete[] allocatedBytes;
}
}
2
这不是愚蠢的使用Objective-C。
也就是说,您可以将NSString *
转换为CFStringRef
并使用CFString
函数获取C字符串。您可能会发现CFStringGetLength
和CFStringGetCString
函数和kCFStringEncodingUTF8
常数有用。请记住,许多Unicode字符需要多个字节来表示UTF-8。
相关问题
- 1. 如何将cstring转换为NSString和NSString为cstring?
- 2. 如何将nsstring转换为cString?
- 3. 如何将cstring转换为NSString?
- 4. 如何将CString转换为CTime在c + +?
- 5. 如何在不转换C#的情况下将字符串转换为字节[]
- 6. 在不使用函数的情况下在C++中将1转换为01
- 7. 在不使用编码的情况下在AFMultipartFormData中发送NSString
- 8. 在不使用stringstream的情况下将char *转换为abitrary numeric
- 9. 从C代码转换为ObjC
- 10. 在C++中将长转换为CString
- 11. 在不转换VBA代码的情况下为Excel创建C#DLL加载项
- 12. 如何在不下载源代码的情况下使用EXSLT?
- 13. 如何在不使用HTML5 Canvas的情况下将base64 dataUri转换为Uint8ClampedArray?
- 14. 如何在不使用Python库函数的情况下将“String”转换为“Int”
- 15. 如何在不使用压缩的情况下将位图转换为ByteArray?
- 16. 如何将C++代码转换为iphone中的Objective C代码?
- 17. 如何在不使用更新的情况下进行转换
- 18. 转换CString转化成NSUTF16encoded的NSString
- 19. 在不使用asp.net中的itextsharp.dll的情况下将HTML页转换为PDF
- 20. 如何在没有microsoft.office.interop的情况下将PDF转换为doc?
- 21. 在不使用XmlDocument的情况下在.NET中将XML转换为JSON
- 22. 如何将C#代码转换为C++
- 23. 如何将C#代码转换为C++?
- 24. BSTR转换为CString的CString
- 25. 在不使用库函数的情况下将ASCII编码转换为C中的十六进制数
- 26. 在没有转换的情况下Java将int []转换为byte []
- 27. 如何使用shedskin将python代码转换为C++代码?
- 28. 将网页源代码转换为NSString
- 29. 如何在不使用microsoft.office.interop的情况下将word文档转换为c#中的文本文件?
- 30. 如何在不使用mbstowcs的情况下在C++中将ASCII char *转换为wchar_t *?
我需要包含什么头才能访问这些函数? – chacham15 2012-03-03 07:59:32
看起来像CoreFoundation/CoreFoundation.h – Tommy 2012-03-03 17:59:39