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

进制转换函数:

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] … );参数列表

bufferchar型指针,指向将要写入的字符串的缓冲区。

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值