2009-11-24 18 views
8

Cómo convertir a TCHAR[] en char[]?Convertir matriz TCHAR en matriz de caracteres

+0

duplicado: http://stackoverflow.com/questions/159442/what-is-the-simplest-way-to-convert-char-to-from-tchar-in-c-cms – Noldorin

+1

Esta voluntad definitivamente te ayudamos: http: //www.codeproject.com/Articles/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc – Ajay

+1

Acabo de cambiar General -> Conjunto de caracteres: = "Usar el conjunto de caracteres Unioncode" y ahora está funcionando (char *) tcharr; – user956584

Respuesta

2

TCHAR es un typedef específico de Microsoft para char o wchar_t (un carácter ancho).

La conversión a char depende de cuál de estos es en realidad. Si TCHAR es realmente un char, puedes hacer un molde simple, pero si es realmente un wchar_t, necesitarás una rutina para convertir conjuntos de caracteres. Véase la función MultiByteToWideChar()

+0

Creo que necesitamos convertir de wchar_t a char, así que necesitamos WidecharToMultiByte !! –

1

que depende del conjunto de caracteres (Unicode o ANSI) (wchar_t o char), por lo que si que está utilizando ANSI simplemente TCHAR será carbón sin ningún casting, pero para Unicode tiene que convertir de wchar_t a Char, puede utilizar WideCharToMultiByte

8

Honestamente no sé cómo hacerlo con matrices pero con punteros, Microsoft nos ofrece algunas API, como wctomb y wcstombs. El primero es menos seguro que el segundo. Así que creo que puedes hacer lo que quieras lograr con un arreglo a puntero y un lanzamiento de puntero a arreglo como;

// ... 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 

PD: No podría ser la mejor solución, pero al menos funciona y es funcional.

0

¿Por qué no usar wcstombs_s?

Aquí está el código para mostrar qué tan simple es.

#define MAX_LENGHT 500 
... 

TCHAR szWideString[MAX_LENGHT]; 
char szString[MAX_LENGHT]; 
size_t nNumCharConverted; 
wcstombs_s(&nNumCharConverted, szString, MAX_LENGHT, 
     szWideString, MAX_LENGHT); 
Cuestiones relacionadas