CFStringRef is toll free bridged на объект NSString, так что если вы используете какао или Objective C в любом случае, преобразование супер просто:
NSString *foo = (NSString *)yourOriginalCFStringRef;
std::string *bar = new std::string([foo UTF8String]);
Подробнее can be found here.
Теперь, поскольку вы не отметили этот вопрос с помощью Cocoa или Objective-C, я предполагаю, что вы не хотите использовать решение Objective-C.
В этом случае вам нужно получить строку C эквивалент от вашего CFStringRef:
const CFIndex kCStringSize = 128;
char temporaryCString[kCStringSize];
bzero(temporaryCString,kCStringSize);
CFStringGetCString(yourStringRef, temporaryCString, kCStringSize, kCFStringEncodingUTF8);
std::string *bar = new std::string(temporaryCString);
я не делал проверки какие-либо ошибки в этом коде, и вы, возможно, придется обнулить завершить строку сгружен через CFStringGetCString
(Я попытался уменьшить это, выполнив bzero
).
Хотя этот ответ прост, он укусил меня в последнее время. Я только что обнаружил, что в документах комментарий рядом с 'CFStringGetCStringPtr' говорит:'/* Может возвращать NULL в любое время; быть подготовлен для NULL */'. Поэтому будьте осторожны, если вы используете это. – dgross