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
。この場合、文字を文字列に変換する必要があります。通常、エンコーディングをより完全に制御できるwcstombs
orのような呼び出しを使用する必要があります。WideCharToMultiByte
どちらの方法でも、結果用にバッファーを割り当て、std::string
このバッファーから を構築する必要があります。完了したらバッファーの割り当てを解除することを忘れないでください (またはvector<char>
、これが自動的に行われるようにするために何かを使用します)。