c++ visual-studio visual-c++ unicode mfc

c++ - Convierta CString en const char*



visual-studio visual-c++ (7)

Hay una conversión explícita en CString a LPCTSTR, por lo que puede hacer (siempre que no se especifique Unicode):

CString str; // .... const char* cstr = (LPCTSTR)str;

¿Cómo convierto de CString a const char* en mi aplicación Unicode MFC?



Para convertir un TCHAR CString a ASCII, use la macro CT2A ; esto también le permitirá convertir la cadena a UTF8 (o cualquier otra página de códigos de Windows):

// Convert using the local code page CString str(_T("Hello, world!")); CT2A ascii(str); TRACE(_T("ASCII: %S/n"), ascii.m_psz); // Convert to UTF8 CString str(_T("Some Unicode goodness")); CT2A ascii(str, CP_UTF8); TRACE(_T("UTF8: %S/n"), ascii.m_psz); // Convert to Thai code page CString str(_T("Some Thai text")); CT2A ascii(str, 874); TRACE(_T("Thai: %S/n"), ascii.m_psz);

También hay una macro para convertir de ASCII -> Unicode ( CA2T ) y puede usarlos en aplicaciones ATL / WTL siempre que tenga VS2003 o superior.

Vea MSDN para más información.


Si su CString es Unicode, tendrá que hacer una conversión a caracteres de varios bytes. Afortunadamente hay una versión de CString que hará esto automáticamente.

CString unicodestr = _T("Testing"); CStringA charstr(unicodestr); DoMyStuff((const char *) charstr);


Te recomiendo que uses TtoC de ConvUnicode.h

const CString word= "hello"; const char* myFile = TtoC(path.GetString());

Es un macro para hacer conversiones por Unicode


Tuve un problema similar. Tenía un búfer char* con el nombre .so en él.
No pude convertir la variable char* a LPCTSTR . Así es como lo solucioné ...

char *fNam; ... LPCSTR nam = fNam; dll = LoadLibraryA(nam);


Nota: esta respuesta es anterior al requisito de Unicode; ver los comentarios

Solo echalo:

CString s; const TCHAR* x = (LPCTSTR) s;

Funciona porque CString tiene un operador de reparto para hacer exactamente esto.

El uso de TCHAR hace que su código sea independiente de Unicode; Si no está preocupado por Unicode, simplemente puede usar char lugar de TCHAR .