不同数据类型之间的转换可以说用得特别频繁,我也是经常查,索性就将其全部整理出来。
一、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