3ef*_*f9g 7 c++ macos stdstring cfstring cfurl-encoding
如何将a转换CFURLRef为C++ std::string?
我还可以从转换CFURLRef的CFStringRef方式:
CFStringRef CFURLGetString ( CFURLRef anURL );
Run Code Online (Sandbox Code Playgroud)
但现在我有同样的问题.我怎样才能转换CFStringRef为std::string?
CFStringRef 是免费桥接到NSString对象的,因此如果您以任何方式使用Cocoa或Objective C,转换非常简单:
NSString *foo = (NSString *)yourOriginalCFStringRef;
std::string *bar = new std::string([foo UTF8String]);
Run Code Online (Sandbox Code Playgroud)
更多细节可以在这里找到.
现在,既然你没有用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);
Run Code Online (Sandbox Code Playgroud)
我没有对此代码执行任何错误检查,您可能需要null终止通过提取的字符串CFStringGetCString(我试图通过这样做来缓解bzero).
小智 7
此功能可能是最简单的解决方案:
const char * CFStringGetCStringPtr ( CFStringRef theString, CFStringEncoding encoding );
Run Code Online (Sandbox Code Playgroud)
当然,有一个用于std :: string(char*)的ctr,它为你提供了转换的单行程序:
std::string str(CFStringGetCStringPtr(CFURLGetString(anUrl),kCFStringEncodingUTF8));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7203 次 |
| 最近记录: |