CStringA,CStringW和CString之间的转换

现实中用到CStringA和CStringW的转换,就封装了一下。

#pragma once
class CStringToolExt
{
public:
	CStringToolExt();
	~CStringToolExt();
public:
	static CStringA CStrT2CStrA(const CString &cstrSrc);
	static CStringW CStrT2CStrW(const CString &cstrSrc);
	static CString CStrA2CStrT(const CStringA &cstrSrc);
	static CString CStrW2CStrT(const CStringW &cstrSrc);
private:
	static CStringW CStrA2CStrW(const CStringA &cstrSrcA);
	static CStringA CStrW2CStrA(const CStringW &cstrSrcW);
};


#include "stdafx.h"
#include "StringToolExt.h"


CStringToolExt::CStringToolExt()
{
}


CStringToolExt::~CStringToolExt()
{
}

CStringA CStringToolExt::CStrT2CStrA(const CString &cstrSrc)
{
#ifdef _UNICODE
	return CStrW2CStrA(cstrSrc);
#else
	return cstrSrc;
#endif
}

CStringW CStringToolExt::CStrT2CStrW(const CString &cstrSrc)
{
#ifdef _UNICODE
	return cstrSrc;
#else
	return CStrA2CStrW(cstrSrc);
#endif
}

CString CStringToolExt::CStrA2CStrT(const CStringA &cstrSrc)
{
#ifdef _UNICODE
	return CStrA2CStrW(cstrSrc);
#else
	return cstrSrc;
#endif
}

CString CStringToolExt::CStrW2CStrT(const CStringW &cstrSrc)
{
#ifdef _UNICODE
	return cstrSrc;
#else
	return CStrW2CStrA(cstrSrc);
#endif
}

CStringA CStringToolExt::CStrW2CStrA(const CStringW &cstrSrcW)
{
	int len = WideCharToMultiByte(CP_ACP, 0, LPCTSTR(cstrSrcW), -1, NULL, 0, NULL, NULL);
	char *str = new char[len];
	memset(str, 0, len * sizeof(char));
	WideCharToMultiByte(CP_ACP, 0, LPCWSTR(cstrSrcW), -1, str, len, NULL, NULL);
	CStringA cstrDestA = str;
	delete str;
	return cstrDestA;
}

CStringW CStringToolExt::CStrA2CStrW(const CStringA &cstrSrcA)
{
	int len = MultiByteToWideChar(CP_ACP, 0, LPCSTR(cstrSrcA), -1, NULL, 0);
	wchar_t *wstr = new wchar_t[len];
	memset(wstr, 0, len * sizeof(wchar_t));
	MultiByteToWideChar(CP_ACP, 0, LPCSTR(cstrSrcA), -1, wstr, len);
	CStringW cstrDestW = wstr;
	delete wstr;
	return cstrDestW;
}

你可能感兴趣的:(C/C++/C#,Windows)