4

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?

4

4 に答える 4

11

コンパイル設定に応じて、TCHARは acharまたは a WCHAR(またはwchar_t) です。

マルチバイト文字列設定を使用している場合はTCHAR、char と同じです。TCHAR*したがって、文字列を返されたものに設定するだけです。

Unicode 文字列設定を使用している場合は、ワイド char であり、 WideCharToMultiByteTCHARを使用して変換する必要があります。

Visual Studio を使用している場合は、プロジェクト プロパティの [文字セット] でこの設定を変更できます。

于 2010-01-26T19:08:30.520 に答える
3

ブライアンの言うことはすべて実行してください。必要なコードページで取得したら、次のことができます。

std::string s(myTchar, myTchar+length);

また

std::wstring s(myTchar, myTchar+length);

それを文字列に取得します。

于 2010-01-26T19:14:35.647 に答える
3

これには、便利な 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++ プロジェクトで使用できます。

于 2010-01-26T19:18:27.687 に答える
1

場合によります。定義していない場合、_UNICODEまたはUNICODE次のような文字を含む文字列を作成できます。

const TCHAR example = _T('Q');
std::string mystring(1, example);

を使用している場合_UNICODEUNICODEこのアプローチは引き続き機能する可能性がありますが、文字を に変換できない場合がありますchar。この場合、文字を文字列に変換する必要があります。通常、エンコーディングをより完全に制御できるwcstombsorのような呼び出しを使用する必要があります。WideCharToMultiByte

どちらの方法でも、結果用にバッファーを割り当て、std::stringこのバッファーから を構築する必要があります。完了したらバッファーの割り当てを解除することを忘れないでください (またはvector<char>、これが自動的に行われるようにするために何かを使用します)。

于 2010-01-26T19:13:07.973 に答える