http://c.biancheng.net/cpp/html/128.html
大致有strtof()、atoi()、atol()、atof()、strtod()、strtol()、strtoul();
当然反过来有atoi();或者利用sprintf 或是sscanf
strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分。如123.456或123e-2。
//字符串转化为长整型 strtol(str,&endptr,radix);//str:字符串或字符数组的首地址,string类型要通过加.c_str()转化为char类型; //&endptr:传递第一个非法字符的地址给endptr; //radix:进制数,以十进制表示 //字符串转化为双精度浮点型 strtod(str,&endptr); //str:字符串或字符数组的首地址; //&endptr:传递第一个非法字符的地址给endptr //字符串转化为整型 atoi(str); //字符串转化为浮点型 atof(str);
#include<iostream>
#include<cstdlib>
#include<string>
using namespace std;
int main(){
char *endptr;
char a[]="12345.6789";
char b[] = "1234.567qwer";
char c[] = "-232.23e4";
char d[] = "123456789.124";
string s1="12345.6789";
string s2="1234.567qwer";
string s3="-232.23e4";
printf( "a=%lf\n", strtod(a,NULL) );
printf( "b=%lf\n", strtod(b,&endptr) );
printf( "endptr=%s\n", endptr );
printf( "c=%lf\n", strtod(c,NULL) );
printf( "a=%lf\n", strtod(s1.c_str(),NULL) );
printf( "b=%lf\n", strtod(s2.c_str(),&endptr) );
printf( "endptr=%s\n", endptr );
printf( "c=%lf\n", strtod(s3.c_str(),NULL) );
printf( "a=%ld\n", strtol(a,&endptr,10) );
printf( "a=%lu\n", strtoul(c,&endptr,10) );
printf( "a=%f\n", strtof(a,&endptr) );
printf( "a=%d\n", atoi(a));
printf( "a=%d\n", atoi(c));
printf( "a=%d\n", atoi(d));
printf( "a=%ld\n", atol(a));
printf( "a=%ld\n", atol(c));
printf( "a=%ld\n", atol(d));
printf( "a=%f\n", atof(a));
printf( "a=%f\n", atof(s1.c_str()));
}