目录
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进制数的字符串