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);



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章