Un CFStringRef is toll free bridged a un oggetto NSString, quindi se si sta utilizzando cacao o Objective C in alcun modo, la conversione è super semplice:
NSString *foo = (NSString *)yourOriginalCFStringRef;
std::string *bar = new std::string([foo UTF8String]);
Maggiori dettagli can be found here.
Ora, dato che non hai taggato questa domanda con Cocoa o Objective-C, suppongo che tu non voglia usare la soluzione Objective-C.
In questo caso, è necessario per ottenere la stringa C equivalente dal CFStringRef:
const CFIndex kCStringSize = 128;
char temporaryCString[kCStringSize];
bzero(temporaryCString,kCStringSize);
CFStringGetCString(yourStringRef, temporaryCString, kCStringSize, kCFStringEncodingUTF8);
std::string *bar = new std::string(temporaryCString);
non ho fatto alcun controllo degli errori su questo codice e potrebbe essere necessario a null terminare la stringa recuperata tramite CFStringGetCString
(Ho cercato di mitigarlo facendo bzero
).
fonte
2015-03-04 18:44:00
Mentre questa risposta è semplice, mi ha morso di recente. Ho appena scoperto che nei documenti, il commento accanto a 'CFStringGetCStringPtr' dice:'/* Può restituire NULL in qualsiasi momento; essere preparato per NULL */'. Quindi stai attento se lo usi. – dgross