Character encoding 将TCHAR数组转换为char数组

Character encoding 将TCHAR数组转换为char数组,character-encoding,visual-c++,tchar,Character Encoding,Visual C++,Tchar,如何将TCHAR[]转换为char[]?TCHAR是Microsoft特定的typedef,用于char或wchar\u t(宽字符) 转换为字符取决于它实际上是这些字符中的哪一个。如果TCHAR实际上是一个char,那么您可以执行简单的强制转换,但如果它确实是一个wchar\u t,则需要一个例程在字符集之间进行转换。查看函数。它取决于字符集(Unicode或ANSI)(wchar\u t或char),因此,如果您使用ANSI简单,则TCHAR将是char,而无需任何强制转换,但对于Unico

如何将
TCHAR[]
转换为
char[]

TCHAR是Microsoft特定的typedef,用于
char
wchar\u t
(宽字符)


转换为字符取决于它实际上是这些字符中的哪一个。如果TCHAR实际上是一个
char
,那么您可以执行简单的强制转换,但如果它确实是一个
wchar\u t
,则需要一个例程在字符集之间进行转换。查看函数。

它取决于字符集(Unicode或ANSI)(wchar\u t或char),因此,如果您使用ANSI简单,则TCHAR将是char,而无需任何强制转换,但对于Unicode,您必须从wchar\u t转换为char,您可以使用

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

// ... 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
/。。。你的包括
#包括
// ... 你的定义
#定义最大长度100
// ... 你的密码
//我假设到目前为止还没有任何定义的TCHAR数组要转换,所以我将创建一个
TCHAR c_wText[MAX_LEN]=“你好,世界!”;
//现在将char指针定义为wcstomb/wcstombs的缓冲区
字符c_szText[MAX_LEN];
wcstombs(c_szText,c_wText,wcslen(c_wText)+1);
// ... 你可以自由使用你的字符数组,c_szText
PS:可能不是最好的解决方案,但至少它工作正常,功能正常。

为什么不直接使用

下面的代码显示了它有多简单

#define MAX_LENGTH 500
...

TCHAR szWideString[MAX_LENGTH];
char szString[MAX_LENGTH];
size_t nNumCharConverted;
wcstombs_s(&nNumCharConverted, szString, MAX_LENGTH,
        szWideString, MAX_LENGTH);

重复:这肯定会对你有所帮助:我只需更改General->Character Set:=“Use Unioncode Character Set”和它现在正在工作的(char*)tcharr;我想我们需要从wchar\u t转换成char,所以我们需要WidecharToMultiByte!!你拼错了“长度”。长度是一个常量而不是关键字。完成后,我固定了长度拼写。