I have a class which returns a typed pointer to a "const TCHAR". I need to convert it to a std::string but I have not found a way to make this happen.
Can anyone provide some insight on how to convert it?
コンパイル設定に応じて、TCHARは acharまたは a WCHAR(またはwchar_t) です。
マルチバイト文字列設定を使用している場合はTCHAR、char と同じです。TCHAR*したがって、文字列を返されたものに設定するだけです。
Unicode 文字列設定を使用している場合は、ワイド char であり、 WideCharToMultiByteTCHARを使用して変換する必要があります。
Visual Studio を使用している場合は、プロジェクト プロパティの [文字セット] でこの設定を変更できます。
ブライアンの言うことはすべて実行してください。必要なコードページで取得したら、次のことができます。
std::string s(myTchar, myTchar+length);
また
std::wstring s(myTchar, myTchar+length);
それを文字列に取得します。
これには、便利な ATL テキスト変換マクロを使用することもできます。
std::wstring str = CT2W(_T("A TCHAR string"));
CT2W = Const Text To Wide。
変換のコード ページを指定することもできます。
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。この場合、文字を文字列に変換する必要があります。通常、エンコーディングをより完全に制御できるwcstombsorのような呼び出しを使用する必要があります。WideCharToMultiByte
どちらの方法でも、結果用にバッファーを割り当て、std::stringこのバッファーから を構築する必要があります。完了したらバッファーの割り当てを解除することを忘れないでください (またはvector<char>、これが自動的に行われるようにするために何かを使用します)。