c++ CString和内置类型之间的转换

最近在写一个程序,利用MFC,写一个界面,结果发现常常需要把一些变量转换为string,才能够在控件上显示(是否还有其他方法,顺便求各路大神指教)。因此,常常需要转换,每次都重新百度一遍,肯跌的啊,今天决心整理一下。主要内容来自

  • C++ CString转int int转CString
  • C++中doulbe/float/int转为CString方法
  • VC常见类型转换
  • CString-->float、int、double

    在MFC中可以采用CString内置的函数Format实现,形式如下
    <pre>CString destination
    destination.Format(_T("%??"),source);
    %c 单个字符
    %d 十进制整数(int)
    %ld 十进制整数(long)
    %f 十进制浮点数(float)
    %lf 十进制浮点数(double)
    %o 八进制数
    %s 字符串
    %u 无符号十进制数
    %x 十六进制数</pre>example(其他转换类似)
    <pre>CString str;
    int number=15;
    str.Format(_T("%d"),number); //str="15"
    str.Format(_T("%4d"),number); //str=" 15"(前面有两个空格)
    str.Format(_T("%.4d"),number); //str="0015"</pre>

    float、int、double-->CString

    短整型(int) i = atoi(temp)
    长整型(long) l = atol(temp)
    浮点(double) d = atof(temp)
    example<pre>CString temp= "100";
    int intResult;
    intResult= atoi(temp); </pre>

    float、int、double-->字符串

    短整型(int) str = itoa(i,temp,10);
    长整型(long) str = ltoa(l,temp,10);
    10表示安装10进制转换

    CString-->字符串指针

    看了一下这个转换有好多争论,主要是这个写法
    <pre>CSting cstr;
    将其转换为字符串指针写成
    (LPSTR)(LPCTSTR)cstr</pre>另一种写法是
    <pre>CString str;
    CStringA strA(str);
    strA.GetString();或strA.GetBuffer(0);
    </pre>个人比较喜欢后面这种,比较清楚,MFC的宏用起来很不顺。。。。

    |转换类型 | |
    |-----------|----------- -----|
    |CString 转char|char *p = (LPSTR)(LPCTSTR)cstr|
    |CString 转char* |char * charpoint; cstr=charpoint;
    ||或者char p = (LPSTR)(LPCTSTR)cstr;
    |CString 转int/float|可以使用 atoi 、_atoi64 或 atol|
    |CString 转string|string s(CString.GetBuffer());|
    ||GetBuffer() 后一定要ReleaseBuffer()|
    |string 转CString|CString.format(”%s”, string.c_str());|
    |string 转char
    |char p = string.c_str();|
    |string 转char|char p = string.c_str();|
    |char 转CString|CString.format(”%s”, char
    );|
    |char 转string|string s(char );|
    |char 转int/float|强制转换|
    |int/float 转CString|s.Format(”%d”, i)|