VS2013各种类型转换

1.CString到const char *的转换

        一种方法:
CString str=_T("这是我的测试程序。");
// 先得到要转换为字符的长度
const size_t strsize=(str.GetLength()+1)*2; // 宽字符的长度;
char * pstr= new char[strsize]; //分配空间;
size_t sz=0;
wcstombs_s(&sz,pstr,strsize,str,_TRUNCATE);
int n=atoi(const char*)pstr); // 字符串已经由原来的CString 转换成了 const char*
//没有这番转换会报错,无法将LPCTSTR或CString 转换为const char*
另一种:
const char * a;
        CString b;
       //a=b;//不存在从CSring到const char *的适当转换函数
       a=(const char *)b.GetBuffer();
       

2.从const char [  ]转换为const wchar_t *

      CString m_strSQL;
      CString m_strSeek;//一编辑框关联的成员变量
      //m_strSQL.Format("book_name'%s'",m_strSeek);//报错,不能将参数 1 从“const char [14]”转换为“const wchar_t *”
      解决方法:
      修改为:m_strSQL.Format(L"book_name'%s'",m_strSeek);
      或
      m_strSQL.Format(_T("book_name\'%s\'"),m_strSeek);
      char 占用一个字节 , wchar_t占用两个字节。所以要转换一下。
      不管是不是用unicode,都使用_T("")宏比较好,因为_T("")会自己转换

3.const char * 到CString

const char * 到CString可以进行直接转换。

      const char * a;
       CString b;
       b=a;//通过

4.CString 转化为string

# include <string>
#include <cstdlib>
using namespace std;
以上是需要在MFC工程中添加的头文件
string CStringToString(CString cstr)
{
    string str;
    setlocale(LC_ALL,"chs");
    wchar_t wch[255];
    char temp[255];
    wcscpy(wch,cstr.GetString());
    wcstombs(temp,wch,254);    
    str.append(temp);        
    return str;
}



5.string 转化为CString

string str=“hello中文”;
CString cstr=str.c_str();

6.char*转化为string

string a;
char* b;
string.append(char *)即可


7.char * 转化为string

string a;
char*b =  "1nihjkk" ;
a.append(b);
也可以直接赋值
string s;
char *p = "adghrtyh";
s = p;
cout << s << endl;

8.char[] 转换成string

同上

9.string转const char*


有2个函数可以运用。
一个是.c_str(),一个是data成员函数。

string s1 = "abcdeg";
const char *k = s1.c_str();
const char *t = s1.data();
printf("%s%s",k,t);
cout<<k<<t<<endl;


10.string转char*

用string的一个成员函数copy实现

string s1 = "abcdefg";
char *data;
int len = s1.length();
data = (char *)malloc((len + 1)*sizeof(char));
s1.copy(data, len, 0);
data[len] = '\0';
printf("%s", data);
cout << data;

11.string转换成char[]

这个由于我们知道string的长度,可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了。
这样的转换不可直接赋值。

    string pp = "dagah";
    char p[8];
    int i;
    for( i=0;i<pp.length();i++)
        p[i] = pp[i];
    p[i] = '\0';
    printf("%s\n",p);
    cout<<p;

你可能感兴趣的:(C++)