当前位置: 首页 > article >正文

C 语言标准库函数——strtol函数

strtol 函数包含在 C 语言标准库的 <stdlib.h> 头文件中,用于将字符串转换为长整数(long int)。它可以处理各种格式的字符串,并且可以指定进制。

strtol 函数的时间复杂度是 O(n),其中 n 是输入字符串的长度。


函数原型

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

参数分析

strtol(字符串名字, 字符指针变量的地址, 进制);

 参数一:nptr

        ◦ 指向要转换的字符串的指针。

        ◦ 字符串可以包含前导空白字符,这些字符会被忽略。

        ◦ 字符串可以以 0x 或 0X 开头,表示十六进制数。

        ◦ 字符串可以以 0 开头,表示八进制数。

        ◦ 其他情况下,字符串被视为十进制数。

参数二:endptr

        ◦ 指向一个字符指针的指针,用于存储转换结束后的字符串位置。

        ◦ 如果 endptr 不为 NULL,strtol 会将转换结束后的字符串位置存储在 endptr 指向的指针中。

        ◦ 如果 endptr 为 NULL,则忽略此参数。

参数三:base

      ◦ 指定转换的进制,范围是 2 到 36。

        ◦ 如果 base 为 0,strtol 会根据字符串的前缀自动判断进制:

                ■ 如果字符串以 0x 或 0X 开头,视为十六进制。

        ·        ■ 如果字符串以 0 开头,视为八进制。

                ■ 否则,视为十进制。

返回值

  • 成功转换时,返回转换后的长整数。
  • 如果字符串中没有有效的数字,返回 0。
  • 如果转换结果超出 long int 的范围,返回 LONG_MAX 或 LONG_MIN,并设置 errno 为 ERANGE

使用样例 

想了解实例点这里:字符串提取数字求和⭐-CSDN博客

#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str1 = "01234a5abc";
    const char *str2 = "0x1234a5abckertty";
    const char *str3 = "01234a5abcww";
    char *aa;
    char *bb;
    char *cc;
    long int num;
    // 十进制转换
    num = strtol(str1,&aa,8);
    printf("str1: %s, num: %ld aa :%s\n", str1, num,aa);

    // 十六进制转换
    num = strtol(str2, &bb, 16);
    printf("str2: %s, num: %ld, bb: %s\n", str2, num, bb);

    // 八进制转换
    num = strtol(str3, &cc, 8);
    printf("str3: %s, num: %ld, cc: %s\n", str3, num, cc);


	return 0;
}

//使用strtol前必须定义一个字符指针变量 

输出 

str1: 01234a5abc, num: 668 aa :a5abc                                                                                    
str2: 0x1234a5abckertty, num: 2147483647, bb: kertty                                                                    
str3: 01234a5abcww, num: 668, cc: a5abcww                                                                               
                                                                                                                        
--------------------------------                                                                                        
Process exited after 0.2409 seconds with return value 0                                                                 
请按任意键继续. . .                                     


http://www.kler.cn/a/504606.html

相关文章:

  • Emacs 折腾日记(九)——elisp 数组与序列
  • 恩山论坛任务python脚本
  • sql_实用查询语句模版
  • excel 整理表格,分割一列变成多列数据
  • 如何在Jupyter中快速切换Anaconda里不同的虚拟环境
  • PyQt5
  • C#轻松实现ModbusTCP服务器接口
  • 高性能、低成本立体声音频模数转换器—— GC1808,支持掉电和时钟检测低功耗模式
  • Go语言的数据竞争 (Data Race) 和 竞态条件 (Race Condition)
  • Centos 离线安装杀毒软件
  • 基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真
  • HarmonyOS鸿蒙-@State@Prop装饰器限制条件
  • kalilinux - 目录扫描之dirsearch
  • Autodl转发端口,在本地机器上运行Autodl服务器中的ipynb文件
  • linux通过web向mac远程传输字符串,mac收到后在终端中直接打印。
  • 微信小程序wx.showToast在真机显示时时间设置无效,显示时间很短问题
  • 传统架构下应用部署
  • 匿名管道通信
  • 深入浅出 Vue.js 渐进式加载图片组件开发
  • CSS 元素的显示模式(块元素,行内元素,行内块元素)
  • Nacos: 一个动态服务发现与配置管理平台
  • 【论文阅读】MAMBA+diffusion系列学习
  • 多线程锁
  • 00_专栏《Redis 7.x企业级开发实战教程》介绍
  • PostgreSQL 超级管理员详解
  • 青少年编程与数学 02-006 前端开发框架VUE 26课题、数据交互