_std::string
_があります。この_std:string
_をCstring
に変換する必要があります。
私は.c_str()
を使用しようとしますが、それは非ユニコードプロジェクト専用であり、ユニコードプロジェクトを使用します(非ユニコードプロジェクトはVS2013で非推奨になっているため)。
誰でもUnicodeプロジェクトで_std::string
_をCString
に変換する方法を示すことができますか?
CString
には、const char*
( CStringT::CStringT
)をとる変換コンストラクターがあります。 std::string
をCString
に変換するのは簡単です:
std::string stdstr("foo");
CString cstr(stdstr.c_str());
これは、UNICODEプロジェクトとMBCSプロジェクトの両方で機能します。 std::string
にNUL
文字が埋め込まれている場合、長さ引数を指定した変換コンストラクターを使用する必要があります。
std::string stdstr("foo");
stdstr += '\0';
stdstr += "bar";
CString cstr(stdstr.c_str(), stdstr.length());
変換コンストラクターは、現在のスレッドのANSIコードページ(CP_THREAD_ACP
)を暗黙的に使用して、ANSIとUTF-16エンコードを変換することに注意してください。スレッドのANSIコードページを変更できない(または変更したくない)が、変換に使用する明示的なコードページを指定する必要がある場合は、別のソリューションを使用する必要があります(例 ATLおよびMFC文字列変換マクロ )。
Unicode CString
のコンストラクターはchar*
を受け入れるため、これを行うことができます。
std::string str = "string";
CString ss(str.c_str());
ATL変換マクロを使用します。 CStringを使用すると、すべてのケースで機能します。 CStringはMBCSまたはUnicodeのいずれかです...コンパイラの設定によって異なります。
std::string str = "string";
CString ss(CA2T(str.c_str());
ボーナス:変換を頻繁に使用する場合、マクロを定義できます:
#define STDTOCSTRING(s) CString(s.c_str())
コードが読みやすくなります。