CString 如何转为wchar_t

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

如果提出用T2W 宏 方法的,请详细说下用法?(用到的头文件和vc6.0可编译通过的用法)]
当然还有很多解决方法,希望大家费心
展开
 我来答
蓝雪儿老师
高能答主

2019-11-14 · 愿千里马,都找到自己的伯乐!
蓝雪儿老师
采纳数:266 获赞数:85198

向TA提问 私信TA
展开全部

unicode下CString 转为wchar_t:

 方法一:使用api:multibytetowidechar进行转换。 

char * pfilename = "d:\\校内项目\\qq.bmp"; //计算char *数组大小,以字节为单位,一个汉字占两个字节int charlen = strlen(pfilename); //计算多字节字符的大小,按字符计算。

int len = multibytetowidechar(cp_acp,0,pfilename,charlen,null,0);//为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小tchar *buf = new tchar[len + 1]; //多字节编码转换成宽字节编码。

multibytetowidechar(cp_acp,0,pfilename,charlen,buf,len); buf[len] = '\0'; //添加字符串结尾,注意不是len+1 //将tchar数组转换为cstringcstring pwidechar,pwidechar.append(buf); //删除缓冲区delete []buf。

方法二:使用函数:a2t、a2w。 

char * pfilename = "d:\\校内项目\\qq.bmp";uses_conversion;cstring s = a2t(pfilename); //cstring s = a2w(pfilename)。方法三:使用_t宏,将字符串转换为宽字符。

//多字节字符集,在vc6和vc7种可以编译通过的语句,但vs2005不能通过,默认为unicode字符集//afxmessagebox("加载数据失败",0)。

//书写代码使用text("")或_t(""),文本在unicode和非unicode程序里都通用、afxmessagebox(_t("加载数据失败"),0)。

扩展资料:

CString转换成char*:

若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

方法一,使用强制转换。例如:CString theString( (_T("Char test "));LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString。

方法二,使用strcpy。例如:CString theString( (_T("Char test "));LPTSTR lpsz = new TCHAR[theString。GetLength()+1];_tcscpy(lpsz, theString)。

需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

方法三,使用CString:GetBuffer。

如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果你只是打算修改字符或者截短字符串,例如:

CString s(_T("Char test "));LPTSTR p = s。GetBuffer(); LPTSTR dot = strchr(p, ''。'');// 在这里添加使用p的代码if(p != NULL) *p = _T('')。

s。ReleaseBuffer();// 使用完后及时释放,以便能使用其它的CString成员函数。

在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

chinazhsj
推荐于2017-09-01 · TA获得超过391个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:141万
展开全部
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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2008-08-29 · TA获得超过5044个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2406万
展开全部
说明白点?unicode方式下CString与wchar_t是通用的
就是说在vs2005中,
WCHAR str=L"字符串";
CString str1=str;
是可以通过编译的,但到vc6中就不可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cmbird
2008-09-02 · TA获得超过576个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:302万
展开全部
T2W宏中实际上根据情况会调用MultiByteToWideChar()函数。如果当前定义了UNICODE,则T2W宏直接返回wchar_t字符串,但若没有定义UNICODE则T2W宏会在分配一些内存,然后调用MultiByteToWideChar()进行转换。

使用T2W宏必须先#include <ATLCONV.h>
然后在使用T2W宏前先执行一次
USES_CONVERSION;
这个宏实际上初始化了进行转换所需的环境。
最后用T2W((LPCTSTR)str)就可以把CString对象str转换成一个WCHAR字符串了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帅幻迩3N
2008-08-29 · TA获得超过682个赞
知道小有建树答主
回答量:486
采纳率:100%
帮助的人:297万
展开全部
CString s("123");
wchar_t *w;
int l;

l = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)s, -1, NULL, 0);
w = new wchar_t[l];
MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)s, -1, w, l);
delete []w;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式