Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: AttilahОтветов: 8

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

  • Тот факт, что вы создаете программу Unicode, является КЛЮЧОМ к этой проблеме - ПОЖАЛУЙСТА, добавьте эту информацию к вопросу. (или кто-то с репутацией это сделает?) Aardvark 13.05.2009

c++visual-studiounicodevisual-c++mfc

Ответы

Ответ 1 · рейтинг 77 · Rob

Чтобы преобразовать 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 · рейтинг 23 · Mark Ransom

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

CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);

Ответ 3 · рейтинг 17 · RichieHindle

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

Просто примените это:

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

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

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

Ответ 4 · рейтинг 5 · Reed Copsey

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

CString str;
// ....
const char* cstr = (LPCTSTR)str;

Ответ 5 · рейтинг 2 · Mr.What

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

char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);

Ответ 6 · felixjimcal

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

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

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

Ответ 7 · Amit G.

Общие макросы преобразования (важен раздел TN059 "Прочие соображения"):

A2CW     (LPCSTR)  -> (LPCWSTR)
A2W      (LPCSTR)  -> (LPWSTR)
W2CA     (LPCWSTR) -> (LPCSTR)
W2A      (LPCWSTR) -> (LPSTR)

Ответ 8 · afs_mp

Я использовал это преобразование:

CString cs = "TEST";
char* c = cs.GetBuffer(m_ncs me.GetLength())

Надеюсь, это будет полезно.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы