Convierta CString en const char *

¿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); 

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 .

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; 

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); 

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

Macros de conversión genérica (TN059 Otra sección de Consideraciones es importante):

 A2CW (LPCSTR) -> (LPCWSTR) A2W (LPCSTR) -> (LPWSTR) W2CA (LPCWSTR) -> (LPCSTR) W2A (LPCWSTR) -> (LPSTR) 
  • TN059: Uso de macros de conversión MFC MBCS / Unicode