4

如何将 a 转换std::wstring为 a TCHAR*std::wstring.c_str()不起作用,因为它返回一个wchar_t*.

我如何从wchar_t*toTCHAR*或从std::wstringto 到达TCHAR*

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

如果定义了 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 回答
2

通常这是不可能的,因为 wchar_t 的大小可能与 TCHAR 不同。

已经列出了几种用于在字符集之间进行转换的解决方案。如果字符集在要转换的范围内重叠,这些可以工作。

我更愿意尽可能完全回避这个问题,并使用在 TCHAR 字符集上定义的标准字符串,如下所示:

typedef std::basic_string<TCHAR> tstring;

使用这个你现在有一个标准库兼容的字符串,它也与 windows TCHAR 宏兼容。

于 2010-05-16T17:19:15.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是一回事。您可能需要强制转换,具体取决于您是否将 /Z 设置为wchar_t是类型,而 wchar_t 是类型定义。

如果您处于多字节构建配置中,则需要MultiByteToWideChar(反之亦然)。

于 2009-12-03T20:00:39.667 回答