gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:25:55 25 4
gpt4 key购买 nike

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

最佳答案

NSString 是免费桥接 CFString (即,您可以只转换指针——它指向的东西可以解释为任何一种类型),并且您可以使用普通 C 调用来操作 CFString

所以你通常会尝试 CFStringGetCStringPtr尝试获取直接指向 NSString 内容的指针作为 C 字符串而不进行任何复制,然后返回分配一个大小合适的 C 样式数组和 CFStringGetCString如果直接指针不可用(通常是因为您想要的编码与 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;
}
}

关于c++ - 如何在没有 Obj-C 代码的情况下将 NSString 转换为 C++ 中的 CString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com