11

CFURLRefを C++に変換するにはどうすればよいstd::stringですか?

CFURLRef次の方法で からに変換することもできますCFStringRef

CFStringRef CFURLGetString ( CFURLRef anURL );

しかし今、私は同じ問題を抱えています。CFStringRefを に変換するにはどうすればよいstd::stringですか?

4

4 に答える 4

9

この関数は、おそらく最も単純なソリューションです。

const char * CFStringGetCStringPtr ( CFStringRef theString, CFStringEncoding encoding );

もちろん、 std::string(char*) の ctr があり、変換のためにこのワンライナーを提供します。

std::string str(CFStringGetCStringPtr(CFURLGetString(anUrl),kCFStringEncodingUTF8));
于 2015-09-03T16:55:52.620 に答える
2

これを達成する最も安全な方法は次のとおりです。

CFIndex bufferSize = CFStringGetLength(cfString) + 1; // The +1 is for having space for the string to be NUL terminated
char buffer[bufferSize];

// CFStringGetCString is documented to return a false if the buffer is too small 
// (which shouldn't happen in this example) or if the conversion generally fails    
if (CFStringGetCString(cfString, buffer, bufferSize, kCFStringEncodingUTF8))
{
    std::string cppString (buffer);
}

canのCFStringGetCStringように NULL を返すことは文書化されていませんCFStringGetCStringPtr

正しいCFStringEncodingタイプを使用していることを確認してください。ほとんどの場合、UTF8 エンコーディングは安全だと思います。

https://developer.apple.com/reference/corefoundation/1542721-cfstringgetcstring?language=objcCFStringGetCStringでApple のドキュメントを確認できます。

于 2016-10-19T12:51:14.300 に答える