如何将TCHAR[]
转换为char[]
?
答案 0 :(得分:9)
老实说,我不知道如何使用数组但使用指针,Microsoft为我们提供了一些API,例如wctomb和wcstombs。第一个不如第二个安全。所以我认为你可以通过一个数组到指针和一个指针到数组的转换来实现你想要实现的目标;
// ... 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:不可能是最好的解决方案,但至少它是有效的。
答案 1 :(得分:4)
TCHAR是char或wchar_t(宽字符)的特定于Microsoft的typedef。
转换为char取决于它实际上是哪一个。如果TCHAR实际上是一个char,那么你可以做一个简单的转换,但如果它真的是一个wchar_t,你需要一个例程来在字符集之间进行转换。查看功能 MultiByteToWideChar()
答案 2 :(得分:1)
它取决于字符集(Unicode或ANSI)(wchar_t或char),因此如果您使用的是ANSI,则TCHAR将为char而不进行任何转换,但对于Unicode,您必须从wchar_t转换为char,您可以使用WideCharToMultiByte
答案 3 :(得分:1)
为什么不使用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);