VC CString与char*相互转换

VC的字符标准实在是太多了,个人觉得很不爽,就一个CString与char*相互转换的问题,就搞得不可开交,这也可能和我不怎么了解VC字符编码标准有关吧。

char*转CString,有人说,用这样一段代码即可:

CString s = "abcd";
char *p = (LPSTR)(LPCTSTR)s;

还有一段,使用这样的方法实现的,只是我还是得不到我想要的结果,一如既往是乱码:

CString str;
char* chain = "我是char*";
str.Format(_T("%s"),chain);

同时,CString转char*,也用了很多网上的方法,结果还是差强人意。。。。


最后,自己得到的经验是,CString和char*相互转换,使用一个中间字符——TCHAR*可解决,如下是我的一些方法源码:

char *w2c(wchar_t *lpcwszStr)
{
	DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
	char *psText;
	psText = new char[dwNum+1];
	memset(psText,0,dwNum+1);
	if(psText)
	{
		WideCharToMultiByte (CP_OEMCP,NULL,lpcwszStr,-1,psText,dwNum,NULL,FALSE);
		return psText;
	}
	else return NULL;
}

这个方法是用来将TCHAR*转换成char*的;

wchar_t *c2w(char *lpcszStr)
{
	DWORD dwNum = MultiByteToWideChar(CP_OEMCP,NULL,lpcszStr,-1,NULL,0);
	wchar_t *psText;
	psText = new wchar_t[dwNum+1];
	memset(psText,0,dwNum+1);
	if(psText)
	{
		MultiByteToWideChar(CP_OEMCP,NULL,lpcszStr,-1,psText,dwNum);
		return psText;
	}
	else return NULL;
}

这个方法是用来将char*转换成TCHAR*的;

而CString和TCHAR*之间的转换通过使用这样的一个方法就可以实现:

CString str = _T("我是CString");
TCHAR* temp = str.GetBuffer(str.GetLength());


所以,当CString转char*时:

CString str = _T("我是CString");
TCHAR* temp = str.GetBuffer(str.GetLength());
char* dest = w2c(temp);

当char*转CString时:

char* sourse = "我是char*";
TCHAR* temp = c2w(source);
CString dest;
dest.Format(_T("%s"),temp);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值