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
还没有评论,来说两句吧...