4

をに変換する方法std::wstringTCHAR*std::wstring.c_str()を返すため、機能しませんwchar_t*

から、またはからwchar_t*への行き方を教えてください。TCHAR*std::wstringTCHAR*

4

6 に答える 6

6

これを使って :

wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();
于 2016-01-03T16:55:01.107 に答える
4
#include <atlconv.h>

TCHAR *dst = W2T(src.c_str());

ANSIまたはUnicodeビルドで正しいことを行います。

于 2009-12-03T21:41:09.843 に答える
2

wchar_tはTCHARと同じサイズではない可能性があるため、通常、これは不可能です

文字セット間で変換するためのいくつかのソリューションがすでにリストされています。これらは、変換される範囲の文字セットが重複している場合に機能します。

私は可能な限り問題を完全に回避し、TCHAR文字セットで次のように定義されている標準の文字列を使用することを好みます。

typedef std::basic_string<TCHAR> tstring;

これを使用すると、WindowsのTCHARマクロとも互換性のある標準ライブラリ互換の文字列が得られます。

于 2010-05-16T17:19:15.617 に答える
2

UNICODEが定義されている場合はTCHAR*はwchar_t*として定義され、それ以外の場合はchar*として定義されます。したがって、コードは次のようになります。

wchar_t* src;
TCHAR* result;
#ifdef UNICODE
result = src;
#else
//I think W2A is defined in atlbase.h, and it returns a stack-allocated var.
//If that's not OK, look at the documenation for wcstombs.
result = W2A(src);
#endif
于 2009-12-03T19:59:41.617 に答える
1

次を使用できます。

wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after
于 2009-12-03T20:09:10.213 に答える
0

Windowsで操作していると仮定します。

Unicodeビルド構成を使用している場合、TCHARwchar_tは同じです。wchar_t/ Zがtypeであるか、wchar_tがtypedefであるかによっては、キャストが必要になる場合があります。

マルチバイトビルド構成を使用している場合は、必要ですMultiByteToWideChar(またはその逆)。

于 2009-12-03T20:00:39.667 に答える