Comment convertir une CString
en const char*
dans mon application Unicode MFC?
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.
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);
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
.
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;
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);
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
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)