CString 如何转为wchar_t

来源:百度知道 编辑:UC知道 时间:2024/05/15 07:49:23
wchar_t:const unsigned short *

如果提出用T2W 宏 方法的,请详细说下用法?(用到的头文件和vc6.0可编译通过的用法)]
当然还有很多解决方法,希望大家费心

CString是基于TCHAR数据类型的对象。
如果在你的程序中定义了符号_UNICODE,则TCHAR被定义为类型wchar_t,即16位字符类型;否则,TCHAR被定义为char,即8位字符类型。

在UNICODE方式下,CString对象由16位字符组成。非UNICODE方式下,CString对象由8位字符组成。

当不使用_UNICODE时,CString是多字节字符集(MBCS,也被认为是双字节字符集,DBCS)。注意,对于MBCS字符串,CString仍然基于8位字符来计算,返回,以及处理字符串,并且你的应用程序必须自己解释MBCS的开始和结束字节。
/////////////////////////
所以两者是不需要转换的,不知你怎么会出现需要转换的情况??
难道你在非UNICODE的情况下要转换成wchar_t?

那就要2楼所用的函数
MultiByteToWideChar

T2W宏中实际上根据情况会调用MultiByteToWideChar()函数。如果当前定义了UNICODE,则T2W宏直接返回wchar_t字符串,但若没有定义UNICODE则T2W宏会在分配一些内存,然后调用MultiByteToWideChar()进行转换。

使用T2W宏必须先#include <ATLCONV.h>
然后在使用T2W宏前先执行一次
USES_CONVERSION;
这个宏实际上初始化了进行转换所需的环境。
最后用T2W((LPCTSTR)str)就可以把CString对象str转换成一个WCHAR字符串了!

说明白点?unicode方式下CString与wchar_t是通用的
就是说在vs2005中,
WCHAR str=L"字符串";
CString str1=str;
是可以通过编译的,但到vc6中就不可以了

CString s("123");
wchar_t *w;
int l;

l = Mul