こんにちは私のプロジェクトでは、ダイアログボックスの名前(wchar_t型)と構成の名前(TCHAR型)を連結する必要があります。 どうすればいいですか?ありがとう。 wchar_tとTCHARを連結する
答えて
これが依存、TCHARはchar
またはwchar_t
エーテルでありますあなたのアプリケーションをUnicodeとして構築するかどうかによって異なります。あなたがUnicodeとしてあなたのアプリケーションを構築する場合は、単純に行うことができます。
wcscat_s(dest, extra);
あなたがUnicodeとしてアプリケーションを構築していない場合は、TCHARの文字列を変換するか必要があります。その後、char
の文字列であるS(:Sを)をwchar_t
:sまたはwchar_t
の文字列に変換します。文字列はchar
です。これを行うには、MultiByteToWideCharまたはWideCharToMultiByteの機能を調べる必要があります。私は通常、いくつかのヘルパーを使用していますので、これらの両方のパラメータは多少怖いです(適切なエラー処理は明確にするために削除されていることに注意してください。呼び出しがERROR_INSUFFICIENT_BUFFER
に失敗した場合)バッファ:
std::wstring multiByteToWideChar(const std::string &s)
{
std::vector<wchar_t> buf(s.length() * 2);
MultiByteToWideChar(CP_ACP,
MB_PRECOMPOSED,
s.c_str(),
s.length(),
&buf[0],
buf.size());
return std::wstring(&buf[0]);
}
std::string wideCharToMultiByte(const std::wstring &s)
{
std::vector<char> buf(s.length() * 2);
BOOL usedDefault = FALSE;
WideCharToMultiByte(CP_ACP,
WC_COMPOSITECHECK | WC_DEFAULTCHAR,
s.c_str(),
s.length(),
&buf[0],
buf.size(),
"?",
&usedDefault);
return std::string(&buf[0]);
}
私は気にせずUnicodeとして私のプロジェクトをコンパイルしたりすることはできませんので、私は型特性クラスを設定したものに加えて:
template <class CharT>
struct string_converter_t;
template <>
struct string_converter_t<char>
{
static std::wstring toUnicode(const std::string &s)
{
return multiByteToWideChar(s);
}
static std::string toAscii(const std::string &s)
{
return s;
}
static std::string fromUnicode(const std::wstring &s)
{
return wideCharToMultiByte(s);
}
static std::string fromAscii(const std::string &s)
{
return s;
}
};
とAN wchar_t
(私は抜粋として残す)とほぼ同じインスタンスです。あなたの場合、単純に次のようにすることができます:
std::wstring result = dialog_name + string_converter_t<TCHAR>::toUnicode(config_name);
あなたはTCHAR *を意味しますか?なぜなら、名前として単一の文字を持つことはちょっと変わってしまうからです。とにかく:TCHARをwchar_tにキャストしてください。TCHARはcharまたはwchar_tのいずれかです。wchar_tにキャストするために保存されています。
この質問はこれに似ている:手動でこれを見ていCannot convert from 'const wchar_t *' to '_TCHAR *'
文字の異なる種類を操作するには:http://www.codeproject.com/KB/TipsnTricks/StringManipulations.aspx
- 1. C++でintをwchar_t *に連結する方法は?
- 2. const wchar_t *パラメータで連結を作成するには?
- 3. unsigned long longをwchar_t *に変換して連結します。
- 4. TCHAR配列を文字列に連結するにはどうすればよいですか?
- 5. TCHARポインタを削除する
- 6. wchar_tとwint_t
- 7. wchar_tとPOSIXライブラリ
- 8. wchar_t *
- 9. 連結IDの値を連結する
- 10. NumPyを連結して連結する
- 11. itoaをTCHARで使用する
- 12. 再'new」TCHAR *配列
- 13. 「wchar_t」ではなく「wchar_t」と呼ばれるのはなぜですか?
- 14. `wint_t`と` wchar_t`にキャストする方法は?
- 15. memcpyと連結
- 16. Memcpyと連結
- 17. ostringstreamでTCHARを使う
- 18. TCHAR []を使用してマップコンテナTCHAR *のKeyvalueを見つけることができませんか?
- 19. malloc:printfとNULL wchar_tでエラーダブルフリー*
- 20. 別の表と結合する表の連結およびグループ連結
- 21. テキストをEvalと連結する
- 22. エンティティをセンテンスと連結する
- 23. char配列とcharを連結する
- 24. リストとnumpy配列を連結する
- 25. コントロールソースを連結すると#Type!エラー
- 26. 列と行を連結する
- 27. UITextとUITextを連結する方法
- 28. SQL Server:SELECTと関連するUDFの結果を結合する
- 29. wchar_t *のwchar_tにはどうすればアクセスできますか?
- 30. C++インデクシングTCHAR文字列
もちろん、過去10年間に構築されたアプリケーションは、おそらくUnicodeとして構築する必要があります。これはかなり簡単な作業です。 :-) –
ありがとう、私はwcscat_s(dest、extra)を使用しました。それは動作しますTCHARはwcharであり、私はユニコードで私のプロジェクトを構築します:) – nidhal
@CodyGray:うん、しかし、あなたのコードUTF-16を作ることは、それが常に動作することを確認したい場合は十分ではありません。 UTF-16のコードポイントは実際に複数の「wchar_t」にまたがることができます。 –