14

如何转换TCHAR[]char[]

4

4 回答 4

11

老实说,我不知道如何使用数组但使用指针,Microsoft 为我们提供了一些 API,例如wctombwcstombs。第一个不如第二个安全。所以我认为你可以用一个数组到指针和一个指针到数组的转换来做你想做的事情;

// ... your includes
#include <stdlib.h>
// ... your defines
#define MAX_LEN 100
// ... your codes
// I assume there is no any defined TCHAR array to be converted so far, so I'll create one
TCHAR c_wText[MAX_LEN] = _T("Hello world!");
// Now defining the char pointer to be a buffer for wcstomb/wcstombs
char c_szText[MAX_LEN];
wcstombs(c_szText, c_wText, wcslen(c_wText) + 1);
// ... and you're free to use your char array, c_szText

PS:不可能是最好的解决方案,但至少它是工作和功能。

于 2012-12-19T01:56:36.370 回答
4

TCHAR 是 Microsoft 特定的 typedefcharwchar_t(宽字符)。

转换为 char 取决于它实际上是其中的哪一个。如果 TCHAR 实际上是 a char,那么你可以做一个简单的转换,但如果它真的是 a wchar_t,你需要一个例程来在字符集之间进行转换。见功能MultiByteToWideChar()

于 2009-11-24T10:48:33.860 回答
3

为什么不直接使用wcstombs_s

这是显示它是多么简单的代码。

#define MAX_LENGTH 500
...

TCHAR szWideString[MAX_LENGTH];
char szString[MAX_LENGTH];
size_t nNumCharConverted;
wcstombs_s(&nNumCharConverted, szString, MAX_LENGTH,
        szWideString, MAX_LENGTH);
于 2017-06-03T04:04:47.180 回答
1

它取决于字符集(Unicode 或 ANSI)(wchar_t 或 char),因此如果您使用 ANSI,则 TCHAR 将是 char 而不进行任何转换,但对于 Unicode,您必须从 wchar_t 转换为 char,您可以使用WideCharToMultiByte

于 2009-11-24T10:49:19.210 回答