web-dev-qa-db-fra.com

Convertir CString en const char *

Comment convertir une CString en const char* dans mon application Unicode MFC?

47
Attilah

Pour convertir une chaîne de caractères TCHAR en ASCII, utilisez la macro CT2A. Ceci vous permettra également de convertir la chaîne en UTF8 (ou toute autre page de code 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);

Il existe également une macro à convertir de ASCII -> Unicode (CA2T) et que vous pouvez utiliser dans les applications ATL/WTL tant que vous avez VS2003 ou une version ultérieure.

Voir le MSDN pour plus d’informations.

64
Rob

Si votre CString est Unicode, vous devrez effectuer une conversion en caractères multi-octets. Heureusement, il existe une version de CString qui le fera automatiquement.

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

Remarque: cette réponse est antérieure à l'exigence Unicode. voir les commentaires.

Il suffit de le lancer:

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

Cela fonctionne parce que CString a un opérateur de casting pour faire exactement cela.

L'utilisation de TCHAR rend votre code indépendant de Unicode; Si vous n'êtes pas préoccupé par Unicode, vous pouvez simplement utiliser char au lieu de TCHAR.

14
RichieHindle

Il y a une conversion explicite sur CString en LPCTSTR, vous pouvez donc le faire (à condition que l'unicode ne soit pas spécifié):

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

J'avais un problème similaire. J'avais un tampon char* avec le nom .so dedans.
Je ne pouvais pas convertir la variable char* en LPCTSTR. Voici comment je me suis débrouillé ...

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

Je vous recommande d'utiliser TtoC de ConvUnicode.h

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

C'est une macro pour faire des conversions par Unicode

0
felixjimcal

Macros de conversion génériques (la section Autres considérations de TN059 est importante):

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 
0
Amit G.