如何在我的Unicode MFC应用程序中从CString
转换为const char*
?
答案 0 :(得分:64)
要将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
),只要你有VS2003或更高版本,就可以在ATL / WTL应用程序中使用它们。
有关详细信息,请参阅MSDN。
答案 1 :(得分:20)
如果您的CString是Unicode,则需要转换为多字节字符。幸运的是,有一个CString版本会自动执行此操作。
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
答案 2 :(得分:15)
注意:此答案早于Unicode要求;看到评论。
投下它:
CString s;
const TCHAR* x = (LPCTSTR) s;
这很有效,因为CString有一个强制转换运算符。
使用TCHAR使您的代码与Unicode无关;如果您不关心Unicode,则只需使用char
代替TCHAR
。
答案 3 :(得分:4)
CString到LPCTSTR有一个显式的强制转换,所以你可以这样做(如果没有指定unicode):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
答案 4 :(得分:1)
我有类似的问题。我有一个char*
缓冲区,里面有.so名称。
我无法将char*
变量转换为LPCTSTR
。这是我如何解决它......
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
答案 5 :(得分:0)
我建议你使用ConvUnicode.h的TtoC
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
这是一个按Unicode执行转换的宏
答案 6 :(得分:0)
通用转换宏(TN059其他注意事项部分很重要):
A2CW (LPCSTR) -> (LPCWSTR)
A2W (LPCSTR) -> (LPWSTR)
W2CA (LPCWSTR) -> (LPCSTR)
W2A (LPCWSTR) -> (LPSTR)
答案 7 :(得分:0)
我使用了这种转换:
CString cs = "TEST";
char* c = cs.GetBuffer(m_ncs me.GetLength())
我希望这是有用的。