转换CString为const char *

在我的Unicode MFC应用程序中如何从CString转换为const char*

要将TCHAR CString转换为ASCII,请使用CT2Amacros – 这也将允许您将string转换为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); 

还有一个macros可以从ASCII – > Unicode( CA2T )进行转换,只要你有VS2003或更高版本,你就可以在ATL / WTL应用程序中使用它们。

有关更多信息,请参阅MSDN 。

如果您的CString是Unicode,则需要转换为多字节字符。 幸运的是有一个CString版本可以自动完成。

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

注意:此答案早于Unicode要求; 看到评论。

只是施展而已:

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

它的工作原理是因为CString有一个转换操作符来完成这个操作。

使用TCHAR使您的代码与Unicode无关; 如果你不关心Unicode,你可以简单地使用char而不是TCHAR

在CString到LPCTSTR上有明确的转换,所以你可以这样做(提供unicode没有指定):

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

我有一个类似的问题。 我有一个char*缓冲区的.so名称。
我无法将char*variables转换为LPCTSTR 。 这是我如何解决它…

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

我build议你从ConvUnicode.h使用TtoC

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

这是每个Unicode进行转换的macros