下面分享一下新心得:
mfc 下CString 转char *
USES_CONVERSION;
char * name = W2A(m_name.GetBuffer(m_name.GetLength()+1));
char * code = W2A(m_code.GetBuffer(m_code.GetLength() + 1));
windows 提供的一个USES_CONVERSION;宏W2A转换 m_name ,m_code 为Cstring变量;
实际是 宽字符与窄字符的转换。
这是unicode的问题, vc里项目“属性-》常规-》字符集”这个选项控制是使用unicode还是多字节, unicode对应的就是LPWSTR, 16位, 多字节就是char, 8位。 LPWSTR的最终宣告是unsigned short, 可见是16位的。MFC里有一个很容易的unicode转ansi的宏, USES_CONVERSION, 通过W2A就可以把LPWSTR转换为char*
而使用强制宽窄字符转换在mfc下只能得到一个字符。
-
提问者评价
-
谢谢!