C++ 数字与char*的转换

1 数字转char*

1.1 sprintf

int sprintf( char *buffer, const char *format [, argument] ... );
由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,
后者则直接在命令行上输出。
sprintf 使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的。
格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终
函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。
其比itoa()系列函数运行速度慢

//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"

//小写16 进制,宽度占8 个位置,右对齐,左边补0 的等宽格式
sprintf(s, "%08X", 4567); //产生:"000011D7"

1.2 itoa

char *itoa (int value, char *str, int base );

itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。
itoa()函数有3个参数:
第一个参数是要转换的数字,
第二个参数是要写入转换结果的目标字符串,
第三个参数是转移数字时所用的进制基数。

#include <stdlib.h>//cstdlib和stdlib.h都可以
#include <stdio.h>//cstdio和stdio.h都可以
//如果用的是cstdio和cstdlib,要加上 using namespace std;
int main(void)
{
    int number = 12;
    char string[25];
    itoa(number, string, 16);
    printf("integer=%d string=%s\n", number, string);
    return 0;
}

输出:

integer = 12,string = c

1.3 ltoa ultoa

头文件 C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)
与itoa类似,只是输入数字的取值范围不同

2 char*转数字

2.1 atoi

头文件
C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)
atoi是标准库函数,itoa不是

int atoi(const char * nptr);

函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(’\0’)才结束转换,并将结果返回。
附加说明
atoi只支持转换表示10进制数的字符串
atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。

2.2 atol

头文件 C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)

long atol(const char *nptr);

函数说明
atol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(’\0’)才结束转换,并将结果返回。

附加说明
atol只支持转换表示10进制数的字符串
atol()与使用strtol(nptr,(char**)NULL,10);结果相同。

2.3 atof

头文件 C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)

double atof(const char *nptr);

函数说明
atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(’\0’)才结束转 换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。返回值 返回转换后的浮点型数。

附加说明
atof只支持转换表示10进制数的字符串
atof()与使用strtod(nptr,(char**)NULL)结果相同。

2.4 strtol

头文件 C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)
long int strtol(const char *nptr,char **endptr,int base);

函数说明
strtol()会将参数nptr字符串根据参数base来转换成长整型数。
参数base范围从2至36,或0。
参数base代表采用的进制方式,如 base值为10则采用10进制,若base值为16则采用16进制等。
当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用 16进制做转换。
一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束 时(’\0’)结束转换,并将结果返回。
若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返回。

返回值 返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。

附加说明 ERANGE指定的转换字符串超出合法范围。

#include <stdlib.h>//cstdlib和stdlib.h都可以
#include <stdio.h>//cstdio和stdio.h都可以
//如果用的是cstdio和cstdlib,要加上 using namespace std;
int main(void)
{
    long lValue = strtol("12",(char**)NULL, 16);
    printf("lValue = %ld \n", lValue );
    return 0;
}

输出:

lValue  = 18

2.5 strtoul

头文件 C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)

unsigned long int strtoul(const char *nptr,char**endptr,int base);

函数说明
strtoul()会将参数nptr字符串根据参数base来转换成无符号的长整型数。参数base范围从2至36,或0。
参数base代表采用的进制方式,如base值为10则采用10进制,若base值为16则采用16进制数等。
当base值为0时则是采用10进制做转换,但遇到如’0x’前置字符则会使用16进制做转换。
一开始strtoul()会扫描参数nptr字符串,跳过前面的空格字符串,直到遇上数字或正负符号才开始做转换,再遇到非数字或 字符串结束时(’\0’)结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr返 回。
返回值 返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中。

附加说明 ERANGE指定的转换字符串超出合法范围。

#include <stdlib.h>//cstdlib和stdlib.h都可以
#include <stdio.h>//cstdio和stdio.h都可以
//如果用的是cstdio和cstdlib,要加上 using namespace std;
int main(void)
{
    unsigned long luValue = strtoul("12",(char**)NULL, 16);
    //unsigned long luValue = strtol("0x12",(char**)NULL, 16);
    //这样写也可以,strtol会根据base的指判断nptr输入是否合法并做正确处理
    printf("lValue = %lu \n", luValue );
    return 0;
}

输出:

lValue  = 18

2.6 strtod

头文件 C stdlib.h
C++ cstdlib(也可以使用stdlib.h,C++向下兼容stdlib.h)

double strtod(const char *nptr,char **endptr);

函数说明
strtod()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时(’\0’)才结束转 换,并将结果返回。
若endptr不为NULL,则会将遇到不合条件而终止的nptr中的字符指针由endptr传回。
参数nptr字符串可包含正负号、 小数点或E(e)来表示指数部分。如123.456或123e-2。

返回值
返回转换后的浮点型数。
strtod只支持转换表示10进制数的字符串

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值