首页 > 其他分享 >C标准库 | 字符串转整数/浮点数函数汇总

C标准库 | 字符串转整数/浮点数函数汇总

时间:2023-01-17 18:38:03浏览次数:48  
标签:__ endptr int 浮点数 汇总 long char nptr 字符串


C标准库 | 字符串转整数/浮点数函数汇总_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​​进制验证:



标签:__,endptr,int,浮点数,汇总,long,char,nptr,字符串
From: https://blog.51cto.com/u_13726704/6017588

相关文章

  • C标准库 | 内存分配以及释放函数汇总
    在日常C语言使用过程中,不可避免遇到从堆中申请空间给特定的数据结构(结构体指针)!一、头文件#include<stdlib.h>文件所在路径:$ls/usr/include/stdlib.h二、函数声明/*Alloc......
  • 洛谷 P1098 [NOIP2007 提高组] 字符串的展开
    洛谷链接牛客链接两个平台都过了题目:题解:本题是一道比较硬核的模拟题,思路方面其实问题不大,但是难在模拟情况上面而且测试数据里还包含了一些题目中没有提到的情况,所......
  • python3.10.0字符串基础
    字符串支持索引(下标访问),第一个字符的索引是0。单字符没有专用的类型,就是长度为一的字符串:>>>word='Python'>>>word[0]#characterinposition0'P'>>>word[......
  • 使用StringBuilder拼接字符串
    使用StringBuilder拼接字符串/*StringBuilder比String来拼接字符串效率高!@#$需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在......
  • 使用StringBuilder反转字符串
    使用StringBuilder反转字符串importjava.util.Scanner;/*需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果例如,键盘录入abc,输出结......
  • 字符串
    1. 获取字符串长度test='helloworld'1)pythonres=len(test)2)jsres=test.length2. 字符串反转test='helloworld'1)pythonres=test[::-1]2)js......
  • 案例. 遍历字符串
    案例.遍历字符串String类的常用方法:publiccharcharAt(intindex);方法,返回指定索引的char值publicintlength();方法,返回此字符串长度importjava.util.Scan......
  • javaScript中为什么字符串相减是NAN Why is “string” - “string” NaN?
    发现这个问题的背景是后端返回数据根据组排序,然后每个组中的对象按照某个字段进行排序显示一开始是这样的  并不生效修改后    排序生效。可以看到只......
  • 【剑指offer知识点】Java中数组、字符串的长度获取区别 length、length()、size()
    [1]结论  Collections家族类使用:size()  字符串类型使用:length()  普通数组类型使用:length[2]整体理解  ·数组的​​length​​​字段用于表示数组的最大容量......
  • 10.Requests【接口请求】requests模拟QuertString查询字符串传参
    一、前言无论是get,还是post请求,我们在模拟接口请求中往往会遇到url中包含形如?name=xiaoming&age=18这种的参数,这种参数是通过url传递到服务器的,像这种参数怎么通过reque......