「const TCHAR へのポインター」を「std::string」に変換するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2141848

  •  22-09-2019
  •  | 
  •  

質問

「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 ++プロジェクトに利用されている。

これは依存しています。あなたが_UNICODEUNICODEを定義していないなら、あなたはこのような文字を含む文字列を作ることができます:

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

あなたは_UNICODEUNICODEを使用しているしている場合、このアプローチは、まだ動作してもよいが、文字がcharに変換可能ではないかもしれません。この場合、あなたは、文字列に文字を変換する必要があります。通常は、あなたのエンコーディングを超える充実に制御することができますwcstombsWideCharToMultiByteのような呼び出しを使用する必要があります。

のいずれかを使用すると、結果のためのバッファを割り当て、(これは自動的に行われるようにstd::stringような何かを、または使用)設定が完了したら、バッファを解放する思い出し、このバッファからvector<char>を構築する必要があります道ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top