Как мне преобразовать CString
в const char*
в моем приложении Unicode MFC?
Преобразование CString в const char *
Ответы (8)
Чтобы преобразовать 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.
CA2T
не конвертируется в Юникод. Он преобразуется в TCHAR
, который может представлять или не представлять символы Юникода. CA2[C]W
- это макрос, который преобразуется в Unicode.
- person IInspectable; 23.12.2012
CT2A ascii(str, CP_UTF8);
решила проблему, о которой я сообщил в комментариях к stackoverflow.com/a/5551013/383779. Спасибо.
- person sergiol; 06.12.2016
ascii
на самом деле не является строкой в кодировке ASCII. Это узкие строки символов, использующие кодировку ANSI, UTF-8 и ANSI (в указанном порядке).
- person IInspectable; 21.02.2017
Если ваш CString - Unicode, вам необходимо выполнить преобразование в многобайтовые символы. К счастью, есть версия CString, которая сделает это автоматически.
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
Примечание. Этот ответ предшествует требованию Unicode; см. комментарии.
Просто примените это:
CString s;
const TCHAR* x = (LPCTSTR) s;
Это работает, потому что в CString есть оператор приведения для этого.
Использование TCHAR делает ваш код независимым от Unicode; если вас не волнует Unicode, вы можете просто использовать char
вместо TCHAR
.
Существует явное приведение CString к LPCTSTR, поэтому вы можете сделать это (при условии, что unicode не указан):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
У меня была аналогичная проблема. У меня был буфер char*
с именем .so в нем.
Я не мог преобразовать переменную char*
в LPCTSTR
. Вот как я это обошел ...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
Я рекомендую вам использовать TtoC из ConvUnicode.h
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
Это макрос для преобразования в Unicode
Общие макросы преобразования (важен раздел TN059 «Прочие соображения»):
A2CW (LPCSTR) -> (LPCWSTR)
A2W (LPCSTR) -> (LPWSTR)
W2CA (LPCWSTR) -> (LPCSTR)
W2A (LPCWSTR) -> (LPSTR)
Я использовал это преобразование:
CString cs = "TEST";
char* c = cs.GetBuffer(m_ncs me.GetLength())
Надеюсь, это будет полезно.