Converti CString in const char *

Come posso convertire da CString a const char* nella mia applicazione Unicode MFC?

Per convertire un TCHAR in ASCII, usa la macro CT2A – questo ti permetterà anche di convertire la stringa in UTF8 (o qualsiasi altra CT2A codici di 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); 

C’è anche una macro da convertire da ASCII -> Unicode ( CA2T ) e puoi usarli nelle app ATL / WTL se hai VS2003 o versioni successive.

Vedere il MSDN per maggiori informazioni.

Se CString è Unicode, dovrai eseguire una conversione in caratteri multibyte. Fortunatamente esiste una versione di CString che lo farà automaticamente.

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

Nota: questa risposta è precedente al requisito Unicode; guarda i commenti

Basta lanciarlo:

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

Funziona perché CString ha un operatore di cast per fare esattamente questo.

L’utilizzo di TCHAR rende indipendente il tuo codice Unicode; se non sei preoccupato per Unicode puoi semplicemente usare char invece di TCHAR .

Esiste un cast esplicito su CString su LPCTSTR, quindi puoi eseguire (fornito unicode non specificato):

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

Ho avuto un problema simile. Ho avuto un buffer char* con il nome .so in esso.
Non ho potuto convertire la variabile char* in LPCTSTR . Ecco come sono riuscito a farcela …

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

Ti consiglio di usare TtoC da ConvUnicode.h

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

È una macro per fare le conversioni per Unicode

Macro di conversione generica (la sezione TN059 Altre considerazioni è importante):

 A2CW (LPCSTR) -> (LPCWSTR) A2W (LPCSTR) -> (LPWSTR) W2CA (LPCWSTR) -> (LPCSTR) W2A (LPCWSTR) -> (LPSTR) 
  • TN059: utilizzo di macro di conversione MBCS / Unicode MFC