Windows编程中CString 、char*或const char*与LPCWSTR类型转换方法

Windows编程中经常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题,于是自己总结了几种解决办法。

一、char* 转 LPCWSTR

    1、通过T2W转换宏

   char* szStr = "Mikasoi";  
   CString str = CString(szStr);
   USES_CONVERSION;
   LPCWSTR wszClassName = new WCHAR[str.GetLength()+1];
   wcscpy((LPTSTR)wszClassName,T2W((LPTSTR)str.GetBuffer(NULL)));
   str.ReleaseBuffer();

    2、通过A2CW转换

char* szStr = "Mikasoi";  
CString str = CString(szStr);
USES_CONVERSION;
LPCWSTR wszClassName = A2CW(W2A(str));
str.ReleaseBuffer();

   3、通过swprintf()转换

char a[] = "";
strcat(a, "Mikasoi");
WCHAR wsz[64];
swprintf(wsz, L"%S", a);
LPCWSTR m_szFilename = wsz;

    4、LPCWSTR实际上也是CONST WCHAR *类型,可以通过MultiByteToWideChar函数转换

char* szStr = "Mikasoi";
WCHAR wszClassName[256];
memset(wszClassName,0,sizeof(wszClassName));
MultiByteToWideChar(CP_ACP,0,szStr,strlen(szStr)+1,wszClassName,
sizeof(wszClassName)/sizeof(wszClassName[0]));

二、CString转LPCWSTR

1、方法一

CString  strFileName;
LPCWSTR lpcwStr = strFileName.AllocSysString();

2、方法二

CString  str = _T("Mikasoi");
USES_CONVERSION;
LPCWSTR lpcwStr = A2CW((LPCSTR)str);

MFC中CString和LPSTR是可以通用,其中A2CW表示(LPCSTR) -> (LPCWSTR),USER_CONVERSION表示用来定义一些中间变量,在使用ATL的转换宏之前必须定义该语句。

三、LPCWSTR转换成CString

 LPCWSTR lpcwStr = L"Mikasoi"; 
 CString str(lpcwStr);

四、CString与const char*的相互转换

①CString强制类型转换为const char*,在变量前加上:(char *)(LPCTSTR),这样做虽不会报错,但其转换后的值可能是乱码,不推荐这样做!

②利用中间变量(string类型),原理:

1)const char*类型可自动装换为CString。

CString cs("Hello");

2)CString类型不能自动转换为const char*。但可以通过Cstring先转化为string,string再调用c_str()转换为const char*

a.Cstring 直接重载LPCTSTR,可以转换到string(在2005貌似编译不过)

CString cs("Hello");

std::string s((LPCTSTR)cs);  //CString->string

b.std::string类型调用c_str()方法就可轻松转换为const char*。

std::string s("Hello");

const char* k = s.c_str(); //string->Const char* 

使用下面的方法可以实现 Cstring(PCTSTR)转换为Const Char*

在Unicode环境下

char str[1024];
wsprintfA(str,"%ls",lpWideChars); 

或者

CStringW strw = _T("test");
CStringA stra(strw.GetBuffer(0));
strw.ReleaseBuffer();
std::string imgpath=stra.GetBuffer(0);
stra.ReleaseBuffer();

非Unicode环境下:

CString strMfc=“test“; 
std::string strStl; 
strStl=strMfc.GetBuffer(0);

猜你喜欢

转载自blog.csdn.net/mikasoi/article/details/81347854