如何将std :: wstring转换为TCHAR *

时间:2009-12-03 19:51:03

标签: c++ unicode tchar

std :: wstring.c_str()返回一个wchar_t *。

如何从wchar_t *到TCHAR *,或从std :: wstring到TCHAR *

由于

6 个答案:

答案 0 :(得分:6)

使用它:

wstring str1(L"Hello world");
TCHAR * v1 = (wchar_t *)str1.c_str();

答案 1 :(得分:4)

#include <atlconv.h>

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

在ANSI或Unicode版本中做正确的事情。

答案 2 :(得分: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

答案 3 :(得分:2)

一般中这是不可能的,因为wchar_t可能与TCHAR的大小不同。

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

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

typedef std::basic_string<TCHAR> tstring;

使用此功能,您现在可以使用与Windows TCHAR宏兼容的标准库兼容字符串。

答案 4 :(得分:1)

您可以使用:

wstring ws = L"Testing123";
string s(ws.begin(), ws.end());
// s.c_str() is what you're after

答案 5 :(得分:0)

假设您在Windows上运行。

如果您使用的是Unicode构建配置,则TCHARwchar_t是相同的。您可能需要一个强制转换,具体取决于您是否为wchar_t设置了/ Z是一种类型,而wchar_t是一个typedef。

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