如何将CFURLRef转换为C++ std::string

我还可以通过以下方式将CFURLRef转换为CFStringRef:

CFStringRef CFURLGetString ( CFURLRef anURL );

但是现在我有同样的问题。如何将CFStringRef转换为std::string

最佳答案

CFStringRef is toll free bridged到NSString对象,因此,如果您以任何方式使用Cocoa或Objective C,转换都非常简单:

NSString *foo = (NSString *)yourOriginalCFStringRef;
std::string *bar = new std::string([foo UTF8String]);

更多细节can be found here

现在,由于您没有使用Cocoa或Objective-C标记此问题,所以我猜您不想使用Objective-C解决方案。

在这种情况下,您需要从CFStringRef获取等效的C字符串:
const CFIndex kCStringSize = 128;
char temporaryCString[kCStringSize];
bzero(temporaryCString,kCStringSize);
CFStringGetCString(yourStringRef, temporaryCString, kCStringSize, kCFStringEncodingUTF8);
std::string *bar = new std::string(temporaryCString);

我没有对此代码进行任何错误检查,您可能需要使终止通过CFStringGetCString获取的字符串为空(我尝试通过执行bzero来缓解这种情况)。

关于c++ - 从CFURLRef或CFStringRef转换为std::string,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28860033/

10-09 12:35