MFCC中CString, int, string, char之间的转换

1.    CString  -->  char*

(1)传给未分配内存的指针

    CString cstr ="ASDDSD";

    char *ch =cstr.GetBuffer(cstr.GetLength()+ 1);

   cstr.ReleaseBuffer();   //使用完后及时释放,以便能使用其它的CString成员函数

    //修改ch指向的值等于修改cstr里面的值

    //用完ch后,不用deletech,因为这样会破坏cstr内部空间,容易造成程序崩溃

(2)赋给已分配内存的char *

    CString cstr1 ="ASDDSD";

    int strLength =cstr1.GetLength() + 1;

    char *pValue =new char[strLength];

    strncpy(pValue,cstr1, strLength);

2.    CString  -->  const char*

传给未分配内存的const char*(LPCTSTR)指针

   CStringcstr(asdd);      //CString cstr=”asdd”;

   const char* ch =(LPCTSTR)cstr;

   //ch指向的地址和cstr相同。但由于使用const保证ch不会修改,所以安全。

3.    CString  -->  char[]

赋给已分配内存char[]数组.

    CString cstr2 ="ASDDSD";

    int strLength2= cstr2.GetLength() + 1;

    charchArray[100];

   memset(chArray,0, sizeof(bool) * 100); //将数组的垃圾内容清空.

   strncpy(chArray, cstr2, strLength2);

    //strncpy(chArray,(LPCTSTR) cstr2,sizeof(chArray));

4.    string  -->  char*

string 是c++标准库里面其中一个,封装了对字符串的操作。

(1)data(),返回没有”\0“的字符串数组

     stringstr="abc";

     char*p=str.data();

(2)c_str 返回有”\0“的字符串数组

    stringstr="gdfd";

    char*p=str.c_str();

(3)copy

    stringstr="hello";

    char p[40];

   str.copy(p,5,0); //这里5代表复制几个字符,0代表复制的位置

   *(p+5)='\0';  //主意一定要手动加上结束符

    cout < <p;

5.    string  -->  CString

    CString.format("%s",string.c_str());

       //用c_str()确实比data()要好

6.    char*  -->  CString

   CString.Format("%s", char*);

7.    char*  -->  string

     strings(char *);

     注:标准C里没有string,char *==char []==string

8.    string  -->   char *

     char *p =string.c_str();

9.    CString  -->  string

    strings(CString.GetBuffer(CString.GetLength()));

       //GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间

10.  CString  -->  char *

    charpoint=strtest.GetBuffer(strtest.GetLength());

     //不建议用(LPCTSTR)进行强制类型转化,这样strtest大小发生变化时会出现错误。

11.   CString  -->  int

      将字符转换为整数,可以使用atoi、_atoi64,类似的还有相关函数atol(转为长整型)、atof(转为浮点小数)等。

     CString ss=″1212.12″;

      inttemp=atoi(ss);

12.  char*   -->   int

      intatoi(const char *nptr);

     long atol(const char *nptr);

     long long atoll(const char *nptr);

     long long atoq(const char *nptr);

13.  CString  -->  int

      可以使用CString的Format函数,Format函数的功能很强,值得你研究一下。

     CString s;

      inti = 64;

     s.Format(“%d”, i);

      //如果是使用char数组,也可以使用sprintf函数。

 

 

补充:

Cstring的相关成员函数:http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391190.html

微软对这方面的总结:http://msdn.microsoft.com/zh-cn/library/vstudio/ms235631.aspx

不能将参数 1 从“char [10]”转换为“LPTSTR”:

解决:http://www.xuebuyuan.com/833065.html

不能将参数 1 从“CString”转换为“const char *” 

解决:http://fengqing888.blog.163.com/blog/static/330114162012016103558408/

 


参考来源:

http://blog.minidx.com/2009/03/03/2209.html

http://blog.csdn.net/sszgg2006/article/details/8667945

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值