Domanda Converti CString in const char *


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


44
2018-05-13 17:31


origine


risposte:


Per convertire un TCHAR CString in ASCII, usa il CT2A macro - questo ti permetterà anche di convertire la stringa in UTF8 (o qualsiasi altra tabella 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 utilizzarli nelle app ATL / WTL finché hai VS2003 o versioni successive.

Vedere il MSDN per maggiori informazioni.


62
2018-05-13 19:13



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

19
2018-05-13 17:37



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 usarlo char invece di TCHAR.


13
2018-05-13 17:35



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

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

4
2018-05-13 17:36



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

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

1
2017-09-22 19:38



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


0
2018-04-12 09:46



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

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 

0
2017-07-17 05:43