Преобразование массива 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);