C标准库 | 字符串转整数/浮点数函数汇总
Posted Neutionwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C标准库 | 字符串转整数/浮点数函数汇总相关的知识,希望对你有一定的参考价值。
在日常Linux C语言开发中,不可避免会用到字符串转整数或者浮点数的操作,例如带参数的
main
函数中,在shell
下对着某个命令输入一组数字参数,这组数字实际上是字符串,在程序内部需要将其转换成数字!
一、头文件
#include <stdlib.h>
文件所在路径:
$ ls /usr/include/stdlib.h
二、函数声明
- 通用函数:
/* Convert a string to a floating-point number. */
extern double atof (const char *__nptr)
__THROW __attribute_pure__ __nonnull ((1)) __wur;
/* Convert a string to an integer. */
extern int atoi (const char *__nptr)
__THROW __attribute_pure__ __nonnull ((1)) __wur;
/* Convert a string to a long integer. */
extern long int atol (const char *__nptr)
__THROW __attribute_pure__ __nonnull ((1)) __wur;
/* Convert a string to a floating-point number. */
extern double strtod (const char *__restrict __nptr,
char **__restrict __endptr)
__THROW __nonnull ((1));
/* Convert a string to a long integer. */
extern long int strtol (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__THROW __nonnull ((1));
/* Convert a string to an unsigned long integer. */
extern unsigned long int strtoul (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__THROW __nonnull ((1));
- 兼容C99:
#ifdef __USE_ISOC99
/* Convert a string to a long long integer. */
__extension__ extern long long int atoll (const char *__nptr)
__THROW __attribute_pure__ __nonnull ((1)) __wur;
#endif
#ifdef __USE_ISOC99
/* Likewise for `float' and `long double' sizes of floating-point numbers. */
extern float strtof (const char *__restrict __nptr,
char **__restrict __endptr) __THROW __nonnull ((1));
extern long double strtold (const char *__restrict __nptr,
char **__restrict __endptr)
__THROW __nonnull ((1));
#endif
#ifdef __USE_ISOC99
/* Convert a string to a quadword integer. */
__extension__
extern long long int strtoll (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__THROW __nonnull ((1));
/* Convert a string to an unsigned quadword integer. */
__extension__
extern unsigned long long int strtoull (const char *__restrict __nptr,
char **__restrict __endptr, int __base)
__THROW __nonnull ((1));
#endif /* ISO C99 or use MISC. */
三、函数作用
__nptr
:要转换的字符串。__endptr
:指向转换中最后一个字符后的字符的指针,很少使用,一般传(char **) NULL
__base
:基数,进制转换,即传入2
、8
、10
、16
。(当 base 的值为0
时,默认采用10
进制转换,但如果遇到'0x'
/'0X'
前置字符则会使用16
进制转换,遇到'0'
前置字符则会使用8
进制转换)
- 通用函数:
函数 | 参数 | 返回值 | 作用 |
---|---|---|---|
atof | __nptr | double | 把参数 __nptr 所指向的字符串转换为一个浮点数(类型为 double 型) |
atoi | __nptr | int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 int 型) |
atol | __nptr | long int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 long int 型) |
strtod | __nptr , __endptr | double | 把参数 __nptr 所指向的字符串转换为一个浮点数(类型为 double 型)。 |
strtol | __nptr , __endptr , __base | long int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 long int 型) |
strtoul | __nptr , __endptr , __base | unsigned long int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 unsigned long int 型) |
- 兼容C99:
函数 | 参数 | 返回值 | 作用 |
---|---|---|---|
atoll | __nptr | long long int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 long long int 型) |
strtof | __nptr , __endptr | float | 把参数 __nptr 所指向的字符串转换为一个浮点数(类型为 float 型)。 |
strtold | __nptr , __endptr | long double | 把参数 __nptr 所指向的字符串转换为一个浮点数(类型为 long double 型)。 |
strtoll | __nptr , __endptr , __base | long long int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 long long int 型) |
strtoull | __nptr , __endptr , __base | long long int | 把参数 __nptr 所指向的字符串转换为一个整数(类型为 unsigned long long int 型) |
四、使用
- 源代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
printf("atof: %f\\n", atof(argv[1]));
printf("atoi: %d\\n", atoi(argv[1]));
printf("atol: %ld\\n", atol(argv[1]));
printf("strtod: %f\\n", strtod(argv[1], (char **)NULL));
printf("strtol: %ld\\n", strtol(argv[1], (char **)NULL, 0));
printf("strtoul: %lu\\n", strtoul(argv[1], (char **)NULL, 0));
printf("atoll: %lld\\n", atoll(argv[1]));
printf("strtof: %f\\n", strtof(argv[1], (char **)NULL));
printf("strtold: %Lf\\n", strtold(argv[1], (char **)NULL));
printf("strtoll: %lld\\n", strtoll(argv[1], (char **)NULL, 0));
printf("strtoull: %llu\\n", strtoull(argv[1], (char **)NULL, 0));
return 0;
- 分别输入
16
进制与10
进制验证:
以上是关于C标准库 | 字符串转整数/浮点数函数汇总的主要内容,如果未能解决你的问题,请参考以下文章