进制转换函数:
1.strtol函数.(任意进制转换为十进制)
函数原型:longint strtol(const char *nptr, char **endptr, int base)
类似的有strtoll,strtoul,strtoull.
功能:将一个任意1-36进制数转化为10进制数,返回是longint型。
base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符,例如:
charbuffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer,&stop, 8));
printf("%s\n",stop);
输出结果:
543
9cend$3
将一个8进制转化为10进制,读取1037,其他后面的为非法字符,转化结果以int型输出来。
参数base范围从2至36,或0。
参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制等。
当base值为0时则是
1.采用10进制做转换,
2.遇到如’0x’前置字符则会使用16进制做转换
3.遇到’0’前置字符而不是’0x’的时候会使用8进制做转换。
最后,需要说明的是,对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。
字符串整形(浮点型)转换函数
2.sprintf函数
功能:(将整数(浮点数)转换为字符串)
原型:int sprintf( char *buffer, const char*format, [ argument] … );参数列表
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据。
返回值:返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或format 是空指针,且不出错而继续,函数将返回-1,并且errno 会被设置为 EINVAL。
sprintf 返回被写入buffer的字节数,结束字符‘\0’不计入内。即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5。
下面举一个例子:
double a;
chart[20];
while(cin>>a)
{
cout<<sprintf(t,"%lf",a)<<endl;
cout<<string(t)<<endl;
}
特殊的格式化字符串可以使用 %d,%lf,%x,0x%x,%o,0%o
将数字转换为其他控制格式类型的字符串
3.sscanf函数,
功能:将字符串转换为整形(浮点型)或者其他类型
函数原型:int sscanf(const char *buffer,const char*format,[argument ]...);
buffer存储的数据
format格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照format的格式将数据写入到argument里。
返回值:
成功则返回参数数目,失败则返回-1,错误原因存于errno中。
举个例子:
double a;
strings="7283.786";
sscanf(s.substr(2,4).c_str(),"%lf",&a);
cout<<a<<endl;
输出:83.7.