Как преобразовать в TCHAR[]
в char[]
?
Преобразование массива TCHAR в массив char
Ответ 1
Честно говоря, я не знаю, как сделать это с массивами, но с указателями, 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: не может быть лучшим решением, но, по крайней мере, оно работает и функционирует.
Ответ 2
TCHAR - специфичный для Microsoft тип typedef для char или wchar_t (широкий символ).
Конверсия в char зависит от того, какая из них она есть. Если TCHAR на самом деле является char, то вы можете сделать простой актерский состав, но если это действительно wchar_t, вам понадобится программа для преобразования между наборами символов. См. Функцию MultiByteToWideChar()
Ответ 3
Это зависит от набора символов (Unicode или ANSI) (wchar_t или char), поэтому, если вы используете ANSI, просто TCHAR будет char без какого-либо приведения, но для Unicode вам придется конвертировать из wchar_t в char, вы можете использовать WideCharToMultiByte
Ответ 4
Почему бы просто не использовать 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);