之前进行MFC编程的时候,总是被各种类型转换搞得头晕脑胀,索性自己写个小程序总结总结,代码如下:
CString str(“Hello”); //在VS2017中CString类型为宽字符型
CString str2(“WORLD”);
//CString 转化为LPSTR
LPSTR m_str_LPSTR;
//LPCWSTR:宽字符串指针
m_str_LPSTR = (LPSTR)(LPCWSTR)str; //
char temp;
m_str_LPSTR++;
m_str_LPSTR++;
temp = *m_str_LPSTR; //因为m_str_LPSTR是一个窄字符串指针,所以一次只能移动一个字节,而CString一个字符占两个字节,所以需要移动两次
//CString转为LPCWSTR
//下面试一下宽字符串指针
LPCWSTR m_str_LPWSTR; //
m_str_LPWSTR = (LPCWSTR)str;
m_str_LPWSTR++;
//*m_str_LPWSTR = s;
temp = *m_str_LPWSTR; //宽字符串指针只需要移动一次即可
//CString转为string
string m_str;
m_str = (LPCSTR)(CStringA)(str); //string是标准C++扩充字符串操作的一个类,而CString是MFC操作字符串的一个类
//CString 转为LPSTR
LPCSTR m_lpcstr;
m_lpcstr= (LPCSTR)(LPCWSTR)str;
//CString 转为char*
//方法一
char* m_pc;
m_pc =(LPSTR) str.GetBuffer(); //getbuffer函数默认返回的是LPCWSTR型指针,需要对指针进行强制类型转换
m_pc++;
m_pc++;
temp = *m_pc;
//方法二
char* m_pc2;
m_pc2 = (LPSTR)(LPCWSTR)str; //LPSTR就是char*型指针
//CString 转为WCHAR*
WCHAR* m_pwc;
m_pwc =(LPWSTR)(LPCWSTR)str;
//突然突发奇想的想将指针转为int*
int* m_pint;
int len_int;
len_int = sizeof(int); //sizeof操作符以字节形式给出了其操作数的存储大小,int型数据占四个字节
m_pint = (int*)(LPCWSTR)str; //m_pint的值为 = 0x00650048 正好是str所表示的字符的ascii码值
最后总结一下:
1.CString 类型的变量名首先强制转换为LPCWSTR指针类型,之后再将该指针类型强制转换即可,就可以随意转为其他类型了。或者可以通过GetBuffer()成员函数也可以返回LPCWSTR指针类型。
2.在转成窄字符指针后,注意指针需要移动两次才能指向下一个字符