Подтвердить что ты не робот

Преобразование CString в const char *

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

4b9b3361

Ответ 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