Conversion CString en const char*

Comment puis-je convertir à partir de CStringconst char* dans mon application Unicode MFC?

44
demandé sur Mateen Ulhaq 2009-05-13 21:31:34

7 réponses

Pour convertir un TCHAR CString ASCII, utiliser le CT2A macro-cela 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 y a aussi une macro à convertir de ASCII -> Unicode (CA2T) et vous pouvez les utiliser dans les applications ATL/WTL aussi longtemps que vous avez VS2003 ou plus.

voir le MSDN pour en savoir plus.

62
répondu Rob 2009-05-13 19:13:40

si votre CString est Unicode, vous aurez besoin de faire 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);
19
répondu Mark Ransom 2009-05-13 18:02:52

Note: Cette réponse est antérieure à L'exigence Unicode; voir les commentaires.

cast:

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

cela fonctionne parce que CString a un opérateur cast pour faire exactement cela.

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

13
répondu RichieHindle 2009-05-13 19:19:47

Il y a un cast explicite sur CString LPCTSTR, de sorte que vous pouvez le faire (à condition de l'unicode n'est pas spécifié):

CString str;
// ....
const char* cstr = (LPCTSTR)str;
4
répondu Reed Copsey 2009-05-13 17:36:33

j'ai eu un problème similaire. J'ai eu un char* tampon avec la .ainsi le nom.

Je ne pouvais pas convertir le char* variable à LPCTSTR. Voici comment je l'ai eu autour d'elle...

char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
1
répondu Mr.What 2011-07-18 14:33:17

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
répondu felixjimcal 2017-04-12 09:46:51

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

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 
0
répondu Amit G. 2018-07-17 05:52:21