CString与char*、char[]、LPSTR、LPCTSTR、LPCWSTR等的转换

ATL宏介绍:
     A2BSTR   OLE2A       T2A       W2A 
     A2COLE   OLE2BSTR    T2BSTR    W2BSTR 
     A2CT     OLE2CA      T2CA      W2CA 
     A2CW     OLE2CT      T2COLE    W2COLE 
     A2OLE    OLE2CW      T2CW      W2CT 

     A2T      OLE2T       T2OLE     W2OLE 

A:ANSI 字符串,也就是 MBCS。 
W:OLE宽字符串,也就是 UNICODE。  
T:中间类型T。如果定义了 _UNICODE,则T表示W;如果定义了 _MBCS,则T表示A。
C:const 的缩写。
利用这些宏,可以快速的进行各种字符间的转换。使用前必须包含头文件,并且申明USER_CONVERSION。

使用 ATL 转换宏,由于不用释放临时空间,所以使用起来非常方便。但是考虑到栈空间的尺寸(VC 默认2M)。

如下是常用的几种转换实例:

// CstringConver.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "CstringConver.h"
#include "afxconv.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	// initialize MFC and print and error on failure
	if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
	{
		// TODO: change error code to suit your needs
		cerr << _T("Fatal Error: MFC initialization failed") << endl;
		nRetCode = 1;
	}
	else
	{
		// TODO: code your application's behavior here.

		//CString转换成char*
		CString csName;
		char *cpName;
		char *cpName1;
		csName = "XiaoMing";
		cpName = (LPSTR)(LPCSTR)csName;
		cpName1 = csName.GetBuffer(0);
		csName.ReleaseBuffer();
		cout << "CString转换成char*" << endl;
		cout << "csName = " << (LPCTSTR)csName << "; &csName = " << &csName << endl;
		cout << "*cpName = " << *cpName << "; cpName = " << cpName << endl;	
		cout << "*cpName1 = " << *cpName1 << "; cpName1 = " << cpName1 << endl;	
		cout << "****************************************************" << endl;
        
		//CString转换成char[]
		char carrHi[64];
		CString csHi;
	    csHi = "Hi,XiaoMing.";
		memset(carrHi,0,64);
		memcpy(carrHi,csHi,csHi.GetLength());
        cout << "CString转换成char[]" << endl;
		cout << "carrHi = " << carrHi << "; &carrHi = " << &carrHi << endl;
		cout << "****************************************************" << endl;

		//CString转换成LPCTSTR,可以直接转换。
		LPCTSTR lpcStrHi;
		lpcStrHi = LPCTSTR(csHi);
		cout << "CString转换成LPCTSTR,可以直接转换。" << endl;
		cout << "lpcStrHi = " << lpcStrHi <<"; &lpcStrHi = " << &lpcStrHi << endl;
        cout << "****************************************************" << endl;
		
		//CString转换成LPSTR
		LPSTR lpstrHi;
		LPSTR lpstrHi1;
		lpstrHi = (LPSTR)(LPCSTR)csHi;
		lpstrHi1 = csHi.GetBuffer(0);
		csHi.ReleaseBuffer();
		cout << "CString转换成LPSTR" << endl;
		cout << "lpstrHi = " << lpstrHi << "; &lpstrHi = " << &lpstrHi << endl;
		cout << "lpstrHi1 = " << lpstrHi1 << "; &lpstrHi1 = " << &lpstrHi1 << endl;
		cout << "****************************************************" << endl;

		//CString转换成LPWSTR
		LPWSTR lpwstrHi;
		lpwstrHi = csHi.AllocSysString();
		cout << "CString转换成LPWSTR" << endl;
		wcout << "lpwstrHi = " << lpwstrHi <<"; &lpwstrHi = " << &lpwstrHi << endl;
        cout << "****************************************************" << endl;
          
		//CString转换成LPCWSTR
        LPCWSTR lpcwstrHi;
		LPCWSTR lpcwstrHi1;
		lpcwstrHi = csHi.AllocSysString();
		USES_CONVERSION;
		lpcwstrHi1 = A2CW((LPCSTR)csHi);
		cout << "CString转换成LPCWSTR" << endl;
		wcout << "lpcwstrHi = " << lpcwstrHi <<"; &lpcwstrHi = " << &lpcwstrHi << endl;
		wcout << "lpcwstrHi1 = " << lpcwstrHi1 <<"; &lpcwstrHi1 = " << &lpcwstrHi1 << endl;
		cout << "====================================================" << endl;
        cout << "****************************************************" << endl;
		cout << "====================================================" << endl;


		//char*转换成CString
		char *cpHll = "Hello";
		//使用CString构造函数。CString可以传入LPCSTR、LPCWSTR、char*、unsigned char*、const unsigned char*等参数来构造CSting对象。
		CString csHll(cpHll); 
		CString csHll1;
        csHll1.Format("%s",cpHll);
        cout << "char*转换成CString" << endl;
		cout << "csHll = " << (LPCTSTR)csHll << "; &csHll = " << &csHll << endl;
		cout << "csHll1 = " << (LPCTSTR)csHll1 << "; &csHll1 = " << &csHll1 << endl;
		cout << "****************************************************" << endl;
		
		//char[]转换成CString
		char carrHello[64] = {"Hello,XiaoMing."};
		CString csHello;
		csHello.Format("%s",carrHello);
		cout << "char[]转换成CString" << endl;
		cout << "csHello = " << (LPCTSTR)csHello << "; &csHello = " << &csHello << endl;
		cout << "****************************************************" << endl;
		
		//LPCTSTR转换成CString
		LPCTSTR lpcstrWorld = _T("World");
        CString csWorld(lpcstrWorld);
		CString csWorld1;
		csWorld1.Format("%s",lpcstrWorld);
        cout << "LPCTSTR转换成CString" << endl;
		cout << "csWorld = " << (LPCTSTR)csWorld << "; &csWorld = " << &csWorld << endl;
		cout << "csWorld1 = " << (LPCTSTR)csWorld1 << "; &csWorld1 = " << &csWorld1 << endl;
		cout << "****************************************************" << endl;

		//LPSTR转换成CString
		LPSTR lpstrWellcome = _T("Wellcome");
        CString csWellcome(lpstrWellcome);
		CString csWellcome1;
		csWellcome1.Format("%s",lpstrWellcome);
        cout << "LPSTR转换成CString" << endl;
		cout << "csWellcome = " << (LPCTSTR)csWellcome << "; &csWellcome = " << &csWellcome << endl;
		cout << "csWellcome1 = " << (LPCTSTR)csWellcome1 << "; &csWellcome1 = " << &csWellcome1 << endl;
		cout << "****************************************************" << endl;
		
	}

	return nRetCode;
}




猜你喜欢

转载自blog.csdn.net/gordennizaicunzai/article/details/80962797