任意进制转换 和 字符串整形转换函数
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.
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.
相关文章推荐
- php版任意进制转换
- 10进制对36进制内任意进制转换
- 任意进制转换
- 进制转换:二进制和十进制的互转和推广至任意进制
- 任意进制转换!!!
- 任意的进制转换
- 十进制向任意进制转换
- 进制转换 HDU2031(十进制向任意进制转化)
- POJ 1220 任意进制转换
- 模板--任意进制转换
- ZOJ 1334 任意进制转换
- POJ 1220 大数任意进制转换
- 关于进制转换的一些函数(可以任意进制转换为任意进制)
- C++实现任意进制转换
- 【HDOJ】2031 任意进制转换
- ACM内部函数--数学问题--任意进制转换
- NOJ 1012 进制转换(十进制转换成任意进制)
- 进制转换 十转任意进制(最优解)
- java任意进制转换
- C#中使用进制转换思想对字符串进行任意进制任意字典的加密和解密