Конвертировать CString в const char * - PullRequest
47 голосов
/ 13 мая 2009

Как мне конвертировать из CString в const char* в моем приложении Unicode MFC?

Ответы [ 7 ]

64 голосов
/ 13 мая 2009

Чтобы преобразовать 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 .

20 голосов
/ 13 мая 2009

Если ваша CString - Unicode, вам нужно будет выполнить преобразование в многобайтовые символы. К счастью, есть версия CString, которая сделает это автоматически.

CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
15 голосов
/ 13 мая 2009

Примечание. Этот ответ предшествует требованию Unicode; см. комментарии.

Просто разыграй:

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

Это работает, потому что у CString есть оператор приведения, чтобы сделать именно это.

Использование TCHAR делает ваш код Unicode-независимым; если вас не интересует Unicode, вы можете просто использовать char вместо TCHAR.

4 голосов
/ 13 мая 2009

Существует явное приведение CString к LPCTSTR, так что вы можете сделать (при условии, что не указан юникод):

CString str;
// ....
const char* cstr = (LPCTSTR)str;
1 голос
/ 22 сентября 2010

У меня была похожая проблема. У меня был char* буфер с именем .so в нем.
Я не смог преобразовать переменную char* в LPCTSTR. Вот как я обошел это ...

char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
0 голосов
/ 17 июля 2018

Универсальные макросы преобразования (важен раздел Другие соображения TN059):

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 
0 голосов
/ 12 апреля 2017

Я рекомендую вам использовать TtoC из ConvUnicode.h

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

Это макрос для преобразования в Unicode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...