String、CString、char*int、float、double相互转换

String、CString、char*、int、float、double相互转换

不同数据类型之间的转换可以说用得特别频繁,我也是经常查,索性就将其全部整理出来。


一、String和int、float、double的转换

 源代码StringAndNumberConvertor:http://download.csdn.net/detail/z702143700/8785721

1.  Stringstream

使用很简单,也很方便,个人比较喜欢的用法,直接上代码:

   

template<typename T>
    static T StringToNumber(const string&desString)
    {
        istringstreamiss(desString);

        Tresult;

        iss>> result;

        returnresult;
    }

   

    template<typename T>
   static string NumberToString(T desNumber)
    {

        ostringstreamoss(desNumber);
        stringresult;
       //oss<< desNumber;
        //特别提出这里不能这样写,否则float、double就不能被正确地转换。
        result= oss.str();
        returnresult;
    }

2.  atoi、atol、atof和_itoa、_ltoa(_itoa_s、_ltoa_s安全转换函数)

atoi、atol、atof是从字符串到数字的转换,_itoa_s、_ltoa_s是从数字到字符串的转换。

示例:

static intStringToInt(string& desString){

        returnatoi(desString.c_str());

}

 
char c2[32];

_itoa_s(desNumber,c2,32,10);//10位有效数字,因为int最大是21亿。

return c2;

3.  strtol、strtoul、strtod

不怎么用的方法:

double a =strtod(desString.c_str(),NULL);

 

 

4.  Sprintf和sscanf

就像控制台的printf和scanf、文件输入输出的fprintf和fscanf一样,sprintf和sscanf是用于字符串的输入输出。它们属于C方式的字符串格式化,printf_s和sscanf_s表示安全转换方法。

 

Sscanf表示将字符串buffer中的特定字符提取成指定的(format)格式。

intsscanf(const char *buffer,const char *format [,argument ] ... );

int表示转换成功的个数,buffer表示要提取的目的字符串,format 表示提取格式,argument 表示保存提取的值。

 

Sprintf表示将format格式中的字符放入到buffe中。

intsprintf(char *buffer,const char *format [,argument] ... );

参数解释同sscanf。

 

5.  _gcvt_s将double转换成string

这个方法多用于double中:

char c2[32];

_gcvt_s(c2,32,desNumber,20);

return c2;

二、String和char*的转换

    String str = "Hello";

    char* c_str = str.c_str(); //转换成c类型的字符串

    char* pstr = str.data(); //转换成字符数组

三、String和Cstring的转换

    //string转成Cstring

    string str = "hello";

    Cstring cstr = str.c_str();或者 Cstring cstr = str.data();

 

    c_str()和data()的区别在于前者返回带'/0'的字符串,后者不带

    cstr.Format("%s", str.c_str());

    cstr.Format("%s", str.data());

 

    //Cstring转成string

    str = cstr.GetBuffer(0);

    str = LPCSTR(cstr);

四、Cstring和char*的转换

    char* ptchar = cstr.GetBuffer(0);

    //注意char*是不同类型转换之间的桥梁!!!

 

五、Cstring和int、float、double的转换

    int n = 123;
    CString cstr;
    cstr.Format("%d", n);

    n = atoi(cstr);//CString转成int
    atof,atol 分别是CString转float long