转换CString为const char *
在我的Unicode MFC应用程序中如何从CString
转换为const char*
?
要将TCHAR
CString转换为ASCII,请使用CT2A
macros – 这也将允许您将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