A CFStringRef is toll free bridged à un objet NSString, donc si vous utilisez Cocoa ou Objective C en aucune façon, la conversion est super simple:
NSString *foo = (NSString *)yourOriginalCFStringRef;
std::string *bar = new std::string([foo UTF8String]);
Plus de détails can be found here. Maintenant, puisque vous n'avez pas étiqueté cette question avec Cocoa ou Objective-C, je suppose que vous ne voulez pas utiliser la solution Objective-C.
Dans ce cas, vous devez obtenir la chaîne C équivalent de votre CFStringRef:
const CFIndex kCStringSize = 128;
char temporaryCString[kCStringSize];
bzero(temporaryCString,kCStringSize);
CFStringGetCString(yourStringRef, temporaryCString, kCStringSize, kCFStringEncodingUTF8);
std::string *bar = new std::string(temporaryCString);
Je n'ai pas fait la vérification des erreurs sur ce code et vous devrez peut-être mettre fin à null la chaîne récupérée via CFStringGetCString
(J'ai essayé d'atténuer cela en faisant bzero
).
Bien que cette réponse est simple, il m'a mordu récemment. Je viens de découvrir que dans les docs, le commentaire à côté de 'CFStringGetCStringPtr' dit:'/* Peut renvoyer NULL à tout moment; être préparé pour NULL */'. Alors faites attention si vous l'utilisez. – dgross