Làm cách nào để chuyển đổi từ CString
sang const char*
trong ứng dụng Unicode MFC của tôi?Chuyển đổi CString thành const char *
Trả lời
Để chuyển đổi một CString TCHAR
để ASCII, sử dụng CT2A
vĩ mô - điều này cũng sẽ cho phép bạn chuyển đổi các chuỗi UTF8 (hoặc bất kỳ trang mã Windows khác):
// 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);
Ngoài ra còn có một macro để chuyển đổi từ ASCII -> Unicode (CA2T
) và bạn có thể sử dụng chúng trong các ứng dụng ATL/WTL miễn là bạn có VS2003 trở lên.
Xem MSDN để biết thêm thông tin.
Tôi đã nhận được câu trả lời cho câu hỏi này sớm hơn một chút và bạn đã đúng, tôi đã sử dụng macro CT2A. Cảm ơn bạn – Attilah
Bạn cũng có thể làm TRACE (_T (" ASCII:% S \ n "), CT2A (str) .m_psz); – ajs410
' CA2T' không ** không ** chuyển thành Unicode. Nó chuyển thành 'TCHAR' có thể hoặc không thể đại diện cho các ký tự Unicode.' CA2 [ C] W' là macro chuyển đổi thành Unicode – IInspectable
Lưu ý: Câu trả lời này đặt trước yêu cầu Unicode; xem nhận xét.
Chỉ cần cast nó:
CString s;
const TCHAR* x = (LPCTSTR) s;
Nó hoạt động vì CString có một nhà điều hành dàn diễn viên để thực hiện chính xác này.
Sử dụng TCHAR làm cho mã của bạn độc lập với Unicode; nếu bạn không quan tâm đến Unicode, bạn có thể chỉ cần sử dụng char
thay vì TCHAR
.
khi tôi thử phương pháp của bạn, tôi nhận được lỗi này: "Lỗi lỗi C2664: 'CppSQLite3DB :: execDML': không thể chuyển đổi tham số 1 từ 'const TCHAR *' thành 'const char * '". cài đặt projetc của tôi sử dụng Unicode nhưng hàm CppSQLite3DB :: execDML yêu cầu tham số const char *. – Attilah
Như Mark nói, bạn cần phải chuyển đổi từ một Unicode CString sang ANSI CStringA: CStringA charstr (unicodestr); Sau đó bạn có thể cast CStringA vào một const char * – RichieHindle
Có một diễn viên rõ ràng trên CString để LPCTSTR, vì vậy bạn có thể làm (unicode cung cấp không được quy định):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
Tôi nhận được thông báo lỗi này: lỗi C2440: 'type cast': không thể chuyển đổi từ 'CString' sang 'LPCSTR' –
Câu trả lời này là đúng cho ANSI CString. Trong trường hợp Unicode CString, xem câu trả lời được chấp nhận. – amolbk
Nếu CString của bạn là Unicode, bạn sẽ cần phải làm một chuyển đổi đa ký tự byte. May mắn thay có một phiên bản của CString sẽ tự động thực hiện điều này.
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
khi tôi sử dụng điều này, tôi nhận được lỗi này: "Lỗi lỗi C2440: 'khởi tạo': không thể chuyển đổi từ 'CString' thành 'ATL :: CStringT
@Attilah: Cảm ơn –
Tôi gặp sự cố tương tự. Tôi đã có một bộ đệm char*
với tên .so trong đó.
Tôi không thể chuyển đổi biến char*
thành LPCTSTR
. Đây là cách tôi đã xung quanh nó ...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
tôi recommendo để bạn sử dụng TtoC từ ConvUnicode.h
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
Nó là một vĩ mô để làm chuyển đổi cho mỗi Unicode
- 1. C++ chuyển đổi char thành const char *
- 2. Chuyển đổi NSString thành const char
- 3. Cách chuyển đổi 'wchar_t *' thành 'const char *'
- 4. Chuyển đổi CString thành mảng ký tự?
- 5. Tại sao tôi không thể chuyển đổi 'char **' thành 'const char * const *' trong C?
- 6. Làm thế nào để chuyển đổi wchar_t * để const char *
- 7. C: Gán "static const char * const" thành "const tĩnh char *"
- 8. CString để chuyển đổi LPCTSTR
- 9. Chuyển đổi từ const char * để std :: string const &
- 10. CString to char *
- 11. Chuyển đổi MFC CString thành số nguyên
- 12. không thể chuyển đổi 'LPCWSTR {aka const wchar_t *}' thành 'LPCSTR {aka const char *}
- 13. chuyển đổi const char * thành NSString * và chuyển đổi lại - _NSAutoreleaseNoPool()
- 14. C++ Lỗi: chuyển đổi không hợp lệ từ 'char' thành 'const char *'
- 15. chuyển đổi không hợp lệ từ 'const char *' thành 'char *' [-fpermissive]
- 16. C++, chuyển đổi không hợp lệ từ 'char' thành 'const char *'
- 17. boost :: variant - tại sao "const char *" được chuyển thành "bool"?
- 18. C Chuyển đổi char thành char *
- 19. Chuyển đổi tăng :: uuid thành char *
- 20. Chuyển đổi Zval thành char *
- 21. Chuyển đổi chuỗi thành char
- 22. const char * kiểu char *
- 23. C++ LibCurl - Chuyển đổi CURLcode thành một CString
- 24. const char * myVar vs const char myVar []
- 25. Chuyển đổi chuỗi const char * thành NSString với độ dài và mã hóa
- 26. Làm cách nào để chuyển đổi Hệ thống :: Chuỗi^thành const char *?
- 27. Cách chuyển đổi tăng :: hệ thống tập tin :: directory_iterator thành const char *
- 28. Chuyển đổi không hợp lệ từ lỗi "const char *" sang "char"
- 29. Chuyển đổi int thành const wchar_t *
- 30. Tại sao không thể chuyển `char **` thành hàm `const char **` trong C?
Thực tế là bạn đang xây dựng một chương trình unicode là chìa khóa cho vấn đề này - XIN thêm thông tin này cho câu hỏi. (hoặc ai đó với đại diện làm điều đó?) – Aardvark