Как мне преобразовать CString в const char* в моем приложении Unicode MFC?
Вопрос
Преобразование CString в const char *
- Тот факт, что вы создаете программу Unicode, является КЛЮЧОМ к этой проблеме - ПОЖАЛУЙСТА, добавьте эту информацию к вопросу. (или кто-то с репутацией это сделает?) Aardvark 13.05.2009
Ответы
Ответ 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.
Похожие материалы
- Std::list‹std::unique_ptr›: пустой список инициализаторов вместо конструктора по умолчанию
- Оператор меньше чем через неявное преобразование?
- Как этот код может быть constexpr? (std :: chrono)
- Почему должны быть определены неиспользуемые виртуальные функции?
- Как запустить другой процесс в режиме отладки?
- Компиляция файла проекта .vbproj или .csproj без Visual Studio