Как мне преобразовать из CString
в const char*
в моем приложении Unicode MFC?
Преобразование CString в const char *
Ответ 1
Чтобы преобразовать a TCHAR
CString в ASCII, используйте макрос CT2A
- это также позволит вам преобразовать строку в UTF8 (или любую другую кодовую страницу 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);
Существует также макрос для преобразования из ASCII → Unicode (CA2T
), и вы можете использовать их в приложениях ATL/WTL, если у вас есть VS2003 или выше.
Подробнее см. MSDN.
Ответ 2
Если ваша CString является Unicode, вам нужно сделать преобразование в многобайтные символы. К счастью, есть версия CString, которая будет делать это автоматически.
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
Ответ 3
Примечание. Этот ответ предшествует требованию Unicode; см. комментарии.
Просто бросьте его:
CString s;
const TCHAR* x = (LPCTSTR) s;
Это работает, потому что у CString есть оператор литья, чтобы сделать именно это.
Использование TCHAR делает ваш код Unicode-независимым; если вас не интересует Unicode, вы можете просто использовать char
вместо TCHAR
.
Ответ 4
В CString используется явное преобразование в LPCTSTR, поэтому вы можете делать (если unicode не указан):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
Ответ 5
У меня была аналогичная проблема. У меня был буфер char*
с именем .so в нем.
Я не смог преобразовать переменную char*
в LPCTSTR
. Вот как я обошел это...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
Ответ 6
Я рекомендую вам использовать TtoC из ConvUnicode.h
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
Это макрос для конверсий в Unicode