您的位置:首页 > 其它

任意进制转换 和 字符串整形转换函数

2016-11-19 13:37 176 查看
进制转换函数:

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";
[b]char *stop;


printf("%d\n",strtol(buffer,&stop, 8));

printf("%s\n",stop);
输出结果:
543

9cend$3[/b]

将一个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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: