【发布时间】:2010-10-25 22:47:38
【问题描述】:
如何在我的 Unicode MFC 应用程序中从 CString 转换为 const char*?
【问题讨论】:
-
您正在构建一个 unicode 程序这一事实是这个问题的关键 - 请将此信息添加到问题中。 (或者有代表的人这样做?)
标签: c++ visual-studio visual-c++ unicode mfc
如何在我的 Unicode MFC 应用程序中从 CString 转换为 const char*?
【问题讨论】:
标签: c++ visual-studio visual-c++ unicode mfc
要将 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 了解更多信息。
【讨论】:
CA2T不转换为 Unicode。它转换为TCHAR,它可能代表也可能不代表Unicode 字符。 CA2[C]W 是转换为 Unicode 的宏。
CT2A ascii(str, CP_UTF8); 行解决了我在stackoverflow.com/a/5551013/383779 的 cmets 上报告的问题。谢谢。
ascii 的对象实际上都不是 ASCII 编码的字符串。它们是窄字符串,使用 ANSI、UTF-8 和 ANSI 编码(按此顺序)。
如果您的 CString 是 Unicode,则需要转换为多字节字符。幸运的是,有一个版本的 CString 可以自动执行此操作。
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
【讨论】:
注意:这个答案早于 Unicode 要求;见 cmets。
只要施放它:
CString s;
const TCHAR* x = (LPCTSTR) s;
之所以有效,是因为 CString 有一个强制转换运算符来执行此操作。
使用 TCHAR 使您的代码独立于 Unicode;如果您不关心 Unicode,您可以简单地使用 char 而不是 TCHAR。
【讨论】:
CString 有一个显式转换为 LPCTSTR,所以你可以这样做(如果没有指定 unicode):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
【讨论】:
我遇到了类似的问题。我有一个带有 .so 名称的 char* 缓冲区。
我无法将char* 变量转换为LPCTSTR。这是我解决它的方法...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
【讨论】:
我建议你使用来自 ConvUnicode.h 的 TtoC
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
这是一个宏,可以根据 Unicode 进行转换
【讨论】:
通用转换宏(TN059 其他注意事项部分很重要):
A2CW (LPCSTR) -> (LPCWSTR)
A2W (LPCSTR) -> (LPWSTR)
W2CA (LPCWSTR) -> (LPCSTR)
W2A (LPCWSTR) -> (LPSTR)
【讨论】:
我使用了这个转换:
CString cs = "TEST";
char* c = cs.GetBuffer(m_ncs me.GetLength())
我希望这是有用的。
【讨论】: