char 转换 LPCWSTR/LPCTSTR 相关问题
来源:互联网 发布:域名转入一般需要几天 编辑:程序博客网 时间:2024/04/27 21:58
原因:单字节转双字节,编码问题
解决方法:在项目属性里面找到项目默认值下面的字符集, 将其换为:使用多字节字符集
注意:debug成功,release依然失败。
原文:http://blog.csdn.net/waxic/archive/2006/09/10/1203750.aspx
由于LPCWSTR必须指向Unicode的字符串,问题的关键变成了Anis字符与Unicode字符之间的转换,不同编码间的转换,通过查找资料可知,可以ATL中转换宏可以用如下方法实现:
CString str=_T("TestStr");
USES_CONVERSION;
LPWSTR pwStr=new wchar_t[str.GetLength()+1];
wcscpy(pwStr,T2W((LPCTSTR)str));
CString str=_T("TestStr");
USES_CONVERSION;
LPWCSTR pwcStr = A2CW((LPCSTR)str);
MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR) -> (LPCWSTR),USER_CONVERSION表示用来定义一些中间变量,在使用ATL的转换宏之前必须定义该语句。
顺便也提一下,如果将LPCWSTR转换成CString,那就更加容易,在msdn中的CString类说明中提到了可以直接用LPCWSTR来构造CString,所以可以进行如下的转换代码:
CString str(pcwStr);
问题总结:
在头文件<atlconv.h>中定义了ATL提供的所有转换宏,如:
A2W (LPCSTR) -> (LPWSTR)
W2CA (LPCWSTR) -> (LPCSTR)
W2A (LPCWSTR) -> (LPSTR)
所有的宏如下表所示:
上表中的宏函数,非常的有规律,每个字母都有确切的含义如下:
2to 的发音和 2 一样,所以借用来表示“转换为、转换到”的含义。AANSI 字符串,也就是 MBCS。W、OLE宽字符串,也就是 UNICODE。T中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示ACconst 的缩写
利用这些宏,可以快速的进行各种字符间的转换。使用前必须包含头文件,并且申明USER_CONVERSION;使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M),使用时要注意几点:
1、只适合于进行短字符串的转换;
2、不要试图在一个次数比较多的循环体内进行转换;
3、不要试图对字符型文件内容进行转换,因为文件尺寸一般情况下是比较大的;
4、对情况 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte();
- char 转换 LPCWSTR/LPCTSTR 相关问题
- VC2005 char 转换 LPCWSTR 问题
- 解决char *无法转换为LPCWSTR问题
- 解决char *无法转换为LPCWSTR问题
- 关于char转换成LPCWSTR的问题
- char tchar wchar_t WCHAR LPCTSTR LPCWSTR
- char tchar wchar_t WCHAR LPCTSTR LPCWSTR
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换以及CString和LPCTSTR的关系
- 无法从"const char [11]"转换为"LPCWSTR"等问题
- VS2005中关于char[]转换成LPCWSTR的问题
- VS2005中关于char[]转换成LPCWSTR的问题
- VC++的小问题:const char[]无法转换到LPCWSTR
- VS2010中关于char[]转换成LPCWSTR的问题
- C++从char*到LPCWSTR的数据类型转换问题
- 关于char[]转换成LPCWSTR的有关问题
- lpctstr lpcwstr
- UNICODE编码下,LPCTSTR,LPCWSTR,LPCSTR转化为char*,及他们的相互转换(不用CString)
- const char *转换为LPCWSTR
- 猜 猜 猜
- py2exe打包python文件成可执行程序
- 从Window系统托盘控制Windows服务
- 让自己成为太阳
- Hibernate中Session对象一些方法的小区分
- char 转换 LPCWSTR/LPCTSTR 相关问题
- Win32汇编递归实现累加
- mysql数据库导入导出命令
- badblocks命令来检查硬盘是否有坏道
- sizeof的用法(附strlen函数)
- Steve Jobs' Outstanding Stanford Commencement Speech from 2005
- android框架结构
- 文件编码转换
- 帮你入门 详解JRE和JDK的区别