「const TCHAR へのポインター」を「std::string」に変換するにはどうすればよいですか?
質問
「const TCHAR」への型付きポインタを返すクラスがあります。それを std::string に変換する必要がありますが、これを実現する方法が見つかりません。
誰かがそれを変換する方法について洞察を提供できますか?
解決
コンパイル設定に応じて、 TCHAR
のいずれかです char
または WCHAR
(または wchar_t
).
マルチバイト文字列設定を使用している場合は、 TCHAR
charと同じです。したがって、文字列を次のように設定するだけです TCHAR*
戻ってきた。
Unicode 文字列設定を使用している場合は、 TCHAR
はワイド文字なので、次を使用して変換する必要があります WideCharToMultiByte.
Visual Studio を使用している場合は (おそらくそうしていると思います)、プロジェクトのプロパティの [文字セット] でこの設定を変更できます。
他のヒント
行うすべてのブライアン氏は述べています。あなたが必要なコードページでそれを取得したら、次にあなたが行うことができます:
std::string s(myTchar, myTchar+length);
または
std::wstring s(myTchar, myTchar+length);
文字列にそれを得るために。
また、例えば、このために便利なATLテキスト変換マクロを使用することができます。
std::wstring str = CT2W(_T("A TCHAR string"));
CT2W =一定ワイドにテキストます。
また、例えば、変換用のコードページを指定することができます。
std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);
(その現在の形で)これらのマクロは、VS2005以降のVisual Studio C ++プロジェクトに利用されている。
これは依存しています。あなたが_UNICODE
やUNICODE
を定義していないなら、あなたはこのような文字を含む文字列を作ることができます:
const TCHAR example = _T('Q');
std::string mystring(1, example);
あなたは_UNICODE
とUNICODE
を使用しているしている場合、このアプローチは、まだ動作してもよいが、文字がchar
に変換可能ではないかもしれません。この場合、あなたは、文字列に文字を変換する必要があります。通常は、あなたのエンコーディングを超える充実に制御することができますwcstombs
かWideCharToMultiByte
のような呼び出しを使用する必要があります。
のいずれかを使用すると、結果のためのバッファを割り当て、(これは自動的に行われるようにstd::string
ような何かを、または使用)設定が完了したら、バッファを解放する思い出し、このバッファからvector<char>
を構築する必要があります道ます。