怎么把CString转换成unicode (VC) 怎么把CString转换成unicode (VC)具体的方法,最好还有例程。呵呵,谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString strTmp; CString m_ANSI = "你好!测试,hello"; DWORD dwNum; dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, NULL, 0); wchar_t *pwText; pwText = new wchar_t[dwNum]; dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, pwText, dwNum); //unicode内容在pwText中,下面显示代码 CString m_Unicode = ""; for(int i = 0; i < (int)dwNum - 1; i++) { strTmp.Format("%04X ", pwText[i]); m_Unicode += strTmp; } delete[] pwText; 如果你的工程是unicode的cstring就会自动转为Unicode 如果你的工程是unicode的cstring就会自动转为Unicode 如果工程是Unicode字符串,那么CString默认就是Unicode的而如果工程是ansi字符串,那么CString就需要转换,通过MultiByteToWideChar转换成宽字符数组, 如果工程是ansi字符串,那么CString就需要转换,可以用CA2W宏,这样比较简单CString str = _T("AAA"); LPCWSTR lpwIP = CA2W(str); TCHAR szFullFileName[200]; wcscpy(szFullFileName, _T("\\Storage Card\\") ); unicode又不是unicode字符串 就是一个CString的字符串,里边有汉字、英文、数字、特殊符号等,然后把每个字都转换成unicode。 MultiByteToWideChar不是好多人说了么? 楼主你对unicode的理解上貌似有偏差!uncode是一种编码方式而已,假如你的工程是unicode的,那就不用转了,Cstring就是那么存的假如你的工程是多字节的,你可以把它转成unicode的字符串,这和你的字符串里面是什么形式无关 CA2W是一种方式,不过还有一个更好的封装类叫 _bstr_t。 定义在 <comdef.h>。_bstr_t 类 可以接受 char* 或者 wchar_t*作为构造参数;可以返回 char* 或者 wchar_t*类型的字符串。 总之不论是 ansi,还是unicode,他都通吃就对了。 http://topic.csdn.net/u/20090428/09/ea1972a8-778d-4f8a-91f7-07409479fc64.html 用CString的AllocSysString()成员函数转换成BSTR数据类型就可以。 实际4、5楼都不是好办法,因为他们都需要判断当前的编译类型是不是unicode的,对于CString,我们其实不应该假定他是unicode还是MBCS,我们应该使用T2W这样的垫片宏转换在编程实践中,应该努力避免写出对是否是unicode敏感的程序,1楼的下面代码就是一个非常非常不好的例子: CString m_ANSI = "你好!测试,hello"; //假定是MBCS楼主正确用法是 CString str = _T("你好!测试,hello"); //注意_TWCHAR* pwstr = T2W(str); //从T转换为W,而不是A到W 俺也顶,不过返回的BSTR在不需要的时候需要释放,如下例:CString szText;szText = ....;BSTR bstrText = szText.AllocSysString();//使用bstrText ....FreeSysString(bstrText); 关于对话框做子窗口的问题 about MapInfo 求一个批处理的解决办法!如何等待命令执行完毕? 失业在家想尝试做点什么?遇到一个头大的问题 请教CPP生成EXE的问题。 向CListCtrl 控件的某一Item 发送鼠标消息的问题 请问如何用VC调用QQ网络硬盘的功能? 编译过程中出现的问题啊! 如何设置动态创建的ComboBox的下拉框长(高)度? ping的问题 在线等!!!用FillPath填充bezier围成的曲线,结果很奇怪!!!!急!! 怎么让一个颜色变浅或加深, 比如说紫色RGB(255,0,255)变浅和加深.
CString m_ANSI = "你好!测试,hello";
DWORD dwNum;
dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, NULL, 0);
wchar_t *pwText;
pwText = new wchar_t[dwNum];
dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, pwText, dwNum);
//unicode内容在pwText中,下面显示代码
CString m_Unicode = "";
for(int i = 0; i < (int)dwNum - 1; i++)
{
strTmp.Format("%04X ", pwText[i]);
m_Unicode += strTmp;
}
delete[] pwText;
cstring就会自动转为Unicode
cstring就会自动转为Unicode
而如果工程是ansi字符串,那么CString就需要转换,通过MultiByteToWideChar转换成宽字符数组,
LPCWSTR lpwIP = CA2W(str);
wcscpy(szFullFileName, _T("\\Storage Card\\") );
不是好多人说了么?
uncode是一种编码方式而已,假如你的工程是unicode的,那就不用转了,Cstring就是那么存的
假如你的工程是多字节的,你可以把它转成unicode的字符串,这和你的字符串里面是什么形式无关
楼主正确用法是 CString str = _T("你好!测试,hello"); //注意_T
WCHAR* pwstr = T2W(str); //从T转换为W,而不是A到W
szText = ....;
BSTR bstrText = szText.AllocSysString();
//使用bstrText
....
FreeSysString(bstrText);