c语言strtol函数、strtod函数、strtoul函数浅悉

news/2024/6/3 6:18:00 标签: c, strtol, strtod, strtoul
cle class="baidu_pl">
cle_content" class="article_content clearfix">
content_views" class="htmledit_views">

+----------------+
|      strtol             |
+----------------+

i.e. string to long

long int strtol(const char *nptr, char **endptr, int base)
strtol()会将nptr指向的字符串࿰c;根据参数base࿰c;按权转化为long int, 然后返回这个值。
参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。
可以被转换的合法字符依据base而定࿰c;举例来说࿰c;当base为2时࿰c;合法字符为‘0’࿰c;‘1’;base为8时࿰c;合法字符为‘0’࿰c;‘1’࿰c;……‘7’;base为10时࿰c;合法字符为‘0’࿰c;‘1’࿰c;……‘9’;base 为16时࿰c;合法字符为‘0’࿰c;‘1’࿰c;……‘9’࿰c;‘a’࿰c;……‘f’;base为24时࿰c;合法字符为‘0’࿰c;……‘9’࿰c;‘a’࿰c;……‘n’࿰c;base为36时࿰c;合法字符为‘0’࿰c;……‘9’࿰c;‘a’࿰c;……‘z’;等等。其中࿰c;不区分大小写࿰c;比如࿰c;‘A’和‘a’会都会被转化为10。
当字符合法时࿰c;‘0’࿰c;……‘9’依次被转换为十进制的0~9࿰c;‘a’࿰c;……‘z’一次北转换为十进制的10~35。
strtol()函数检测到第一个非法字符时࿰c;立即停止检测࿰c;其后的所有字符都会被当作非法字符处理。合法字符串会被转换为long int, 作为函数的返回值。非法字符串࿰c;即从第一个非法字符的地址࿰c;被赋给*endptr。**endptr是个双重指针࿰c;即指针的指针。strtol()函数就是通过它改变*endptr的值࿰c;即把第一个非法字符的地址传给endptr。

多数情况下࿰c;endptr设置为NULL, 即不返回非法字符串。
下面看几个例子:
------------------------------------------------------
char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 2));
printf("%s\n", stop);
输出结果:
2
379cend$3
-------------------------------------------------------
char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 8));
printf("%s\n", stop);
输出结果:
543
9cend$3
--------------------------------------------------------
char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 10));
printf("%s\n", stop);
输出结果:
10379
cend$3
-------------------------------------------------------
char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 16));
printf("%s\n", stop);
输出结果:
17005006
nd$3
另外࿰c;如果base为0࿰c;且字符串不是以0x(或者0X)开头࿰c;则按十进制进行转化。如果base为0或者16࿰c;并且字符串以0x(或者0X)开头࿰c;那么࿰c;x(或者X)被忽略࿰c;字符串按16进制转化。如果base不等于0和16࿰c;并且字符串以0x(或者0X)开头࿰c;那么x被视为非法字符。
例如:
-------------------------------------------------------
char buffer[20]="0x31da6c";
char *stop;
printf("%d\n",strtol(buffer, &stop, 0));
printf("%s\n", stop);
输出结果(stop为空):
3267180

-------------------------------------------------------
char buffer[20]="0x31da6c";
char *stop;
printf("%d\n",strtol(buffer, &stop, 13));
printf("%s\n", stop);
输出结果:
0
0x31da6c
-------------------------------------------------------

最后࿰c;需要说明的是࿰c;对于nptr指向的字符串࿰c;其开头和结尾处的空格被忽视࿰c;字符串中间的空格被视为非法字符。
例如:
-------------------------------------------------------
char buffer_1[20]="10379c";
char buffer_2[20]="      10379c        ";
char buffer_3[20]="      10      379c        ";
printf("%d\n",strtol(buffer_1,NULL,0));
printf("%d\n",strtol(buffer_2,NULL,0));
printf("%d\n",strtol(buffer_3,NULL,0));
输出结果为:
10379
10379

10

+----------------+
|      strtol             |
+----------------+

表头文件:#include <stdlib.h>

定义函数:<code>doublecode> <code>strtodcode><code>(code><code>constcode> <code>charcode> <code>*nptr,code><code>charcode> <code>**endptr);code>

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

 

<code>#include<stdlib.h>code>

<code>#include<stdio.h>code>

<code>void main()code>

<code>{code>

<code>char *endptr;code>

<code>char a[] = "12345.6789";code>

<code>char b[] = "1234.567qwer";code>

<code>char c[] = "-232.23e4";code>

<code>printf( "a=%lf\n", strtod(a,NULL) );code>

<code>printf( "b=%lf\n", strtod(b,&endptr) );code>

<code>printf( "endptr=%s\n", endptr );code>

<code>printf( "c=%lf\n", strtod(c,NULL) );code>

<code>}code>


结果为:

<code>a=12345.678900code>

<code>b=1234.567000code>

<code>endptr=qwercode>

<code>c=-2322300.000000code>

+----------------+
|      strtoul             |
+----------------+

定义函数: unsigned long strtoul(const char *nptr,char **endptr,int base);

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

例子:将十六进制 0xFF࿰c;转换成 10进制࿰c;得到 255

 

<code>#include<stdio.h>code>

<code>#include<stdlib.h>code>

<code>intmain()code>

<code>{code>

<code>inta;code>

<code>charpNum[]="0xFF";code>

<code>a=strtoul(pNum,0,0);//最后的0࿰c;表示自动识别pNum是几进制code>

<code>printf("%d\n",a);code>

<code>return0;code>

<code>}code>


http://www.niftyadmin.cn/n/4950672.html

相关文章

中远麒麟堡垒机 SQL注入漏洞复现

0x01 产品简介 中远麒麟依托自身强大的研发能力,丰富的行业经验&#xff0c;自主研发了新一代软硬件一体化统一安全运维平台一-iAudit 统一安全运维平台。该产品支持对企业运维人员在运维过程中进行统一身份认证、统一授权、统一审计、统一监控&#xff0c;消除了传统运维过程中…

gin中关于参数注入问题

关于参数注入的问题 如果在开发中一旦发小参数没有按照既定的要求注入到结构体的话&#xff0c;这个时候就一定要看请求方式什么&#xff1f;如果是post请求、 前端—post—json{id:1,pageSize:10,page:1}———————————- 参数注入方法&#xff1a;ShouldBindJSON p…

无涯教程-Perl - warn函数

描述 此函数将LIST的值打印到STDERR。基本上与die函数相同,除了不对出口进行任何调用并且在eval语句内不引发异常。这对于引发错误而不导致脚本过早终止很有用。 如果变量$包含一个值(来自先前的eval调用),并且LIST为空,则$的值将以。\t.caught打印。附加到末尾。如果$和LIST…

题解 | #1004.Do You Like Interactive Problems?# 2023杭电暑期多校10

1004.Do You Like Interactive Problems? 概率论-数学期望 题目大意 给定一个正整数 n n n &#xff0c;在 1 1 1 ~ n n n 范围内有一个正整数 x x x 进行若干轮猜测&#xff0c;每次猜测在 1 1 1 ~ n n n 范围内等概率随机选择一个正整数 y y y &#xff0c;可以得…

微信ipad协议8.0.40 加好友功能

友情链接 geweapi.com 点击即可访问&#xff01; 好友请求验证 小提示&#xff1a; v_3 v_4 可以参考 搜索接口 请求URL&#xff1a; http://域名地址/api/contacts/verifyuser 请求方式&#xff1a; POST 请求头&#xff1a; Content-Type&#xff1a;application/js…

fastapi发布web配置页面

fastapi发布web配置页面 FastAPI 是一个基于 Python 的快速 Web 开发框架&#xff0c;它提供了许多功能来简化 Web 开发过程。其中一个重要的功能是能够轻松地创建 API 文档页面。 在 FastAPI 中&#xff0c;可以使用 OpenAPI 和 Swagger 来创建 API 文档页面。下面是一个简单…

springboot后端返回图片,vue前端接收并显示的解决方案

后端图片数据返回 后端通过二进制流的形式&#xff0c;写入response中 controller层 /*** 获取签到二维码*/GetMapping("/sign-up-pict")public void signUpPict(Long id, Long semId, HttpServletResponse response) throws NoSuchAlgorithmException {signUpServ…

数据结构之线性表的类型运用Linear Lists: 数组,栈,队列,链表

线性表 定义 一个最简单&#xff0c;最基本的数据结构。一个线性表由多个相同类型的元素穿在一次&#xff0c;并且每一个元素都一个前驱&#xff08;前一个元素&#xff09;和后继&#xff08;后一个元素&#xff09;。 线性表的类型 常见的类型&#xff1a;数组、栈、队列…