Một CFStringRef is toll free bridged đến một đối tượng NSString, vì vậy nếu bạn đang sử dụng Cocoa hoặc Objective C dưới mọi hình thức, chuyển đổi là siêu đơn giản:
NSString *foo = (NSString *)yourOriginalCFStringRef;
std::string *bar = new std::string([foo UTF8String]);
Chi tiết can be found here.
Bây giờ, vì bạn không gắn thẻ câu hỏi này với Cocoa hoặc Objective-C, tôi đoán bạn không muốn sử dụng giải pháp Mục tiêu-C.
Trong trường hợp này, bạn cần phải nhận được chuỗi C tương đương từ CFStringRef của bạn:
const CFIndex kCStringSize = 128;
char temporaryCString[kCStringSize];
bzero(temporaryCString,kCStringSize);
CFStringGetCString(yourStringRef, temporaryCString, kCStringSize, kCFStringEncodingUTF8);
std::string *bar = new std::string(temporaryCString);
tôi đã không làm bất kỳ kiểm tra lỗi trên mã này và bạn có thể cần để null chấm dứt chuỗi vời qua CFStringGetCString
(Tôi đã cố gắng giảm thiểu điều đó bằng cách thực hiện bzero
).
Nguồn
2015-03-04 18:44:00
Trong khi câu trả lời này là đơn giản, nó cắn tôi thời gian gần đây. Tôi vừa phát hiện ra rằng trong các tài liệu, chú thích bên cạnh 'CFStringGetCStringPtr' nói:'/* Có thể trả về NULL bất cứ lúc nào; được chuẩn bị cho NULL */'. Vì vậy, hãy cẩn thận nếu bạn sử dụng điều này. – dgross