首页/新闻资讯/正文详情

C语言学习笔记20260718-实现任意进制字符串转十进制(my_atoi_base)

发布时间:2026/11/14 10:56:10 来源:云帆数科 栏目:资讯中心
C语言学习笔记20260718-实现任意进制字符串转十进制(my_atoi_base)
C语言学习笔记20260718-实现任意进制字符串转十进制my_atoi_base1. 核心功能与算法原理在嵌入式开发或底层数据处理中我们经常需要将不同进制的字符串如十六进制的寄存器地址、二进制的状态码转换为十进制整数。标准库的atoi()只能处理十进制因此需要手动实现一个支持任意进制2-36进制的转换函数。本代码的核心算法是**“秦九韶算法”又称霍纳法则**的变种。其核心思想是从左到右逐位扫描每读取一位就将当前结果乘以进制基数再加上当前位的数值。例如将十六进制字符串1A转换为十进制初始result 0读取1(值为1)result 0 * 16 1 1读取A(值为10)result 1 * 16 10 26最终结果为 26。2. 代码逻辑逐段解析2.1 前置校验与变量初始化函数首先对输入指针str和进制base进行合法性校验只支持2-36进制。同时定义了result用于累加结果sign用于记录正负号i作为字符串索引。2.2 预处理跳过空格、处理符号与十六进制前缀跳过空格使用isspace()循环跳过字符串开头的空白字符。处理符号检测首字符是否为-或记录符号位并移动索引。处理十六进制前缀如果进制是16且字符串以0x或0X开头自动跳过这两个字符从真正的数值位开始解析。2.3 核心转换循环使用while(str[i])逐位遍历字符串字符转数值0-9直接减去0得到 0-9。A-Z或a-z减去A或a后加 10得到 10-35。合法性判断如果转换出的digit大于等于当前进制base例如二进制中出现了2则视为非法字符直接跳出循环。溢出检测在累加前通过数学公式预判result * base digit是否会导致int溢出。如果正数溢出返回INT_MAX负数溢出返回INT_MIN。累加计算执行result result * base digit。3. 关键知识点总结字符与数字的转换在 ASCII 码中数字字符0-9是连续排列的字母A-Z也是连续的。利用这一特性可以通过简单的减法完成字符到数值的映射。防溢出设计直接进行result * base digit计算在数值极大时会导致int溢出产生不可预知的错误。在计算前使用(INT_MAX - digit) / base进行预判是编写健壮底层库函数的必备技巧。进制范围由于使用了 0-9 和 A-Z/a-z 作为数值符号该算法最大支持 36 进制。4. 完整代码Doxygen 注释版/** * file my_atoi_base.c * brief 自定义任意进制字符串转十进制整数工具函数 * * 实现了支持 2-36 进制的字符串转整数功能包含溢出检测与非法字符过滤。 * 适用于嵌入式开发、底层数据处理等场景。 * * author YourName * date 2026-07-18 * version v1.0 */#define_CRT_SECURE_NO_WARNINGS1#includestdio.h#includestring.h#includectype.h#includelimits.h/** * brief 将指定进制的字符串转换为十进制整数 * * 核心算法采用秦九韶算法霍纳法则从左到右逐位扫描并累加。 * 支持跳过前导空格、处理正负号以及十六进制前缀0x/0X。 * 内置整数溢出检测机制保证数值转换的安全性。 * * param[in] str 待转换的字符串指针支持包含数字、大小写字母 * param[in] base 目标进制基数取值范围2 ~ 36 * * return 转换后的十进制整数 * retval 0 输入指针为空或进制非法 * retval INT_MAX 正数转换发生溢出时返回 * retval INT_MIN 负数转换发生溢出时返回 * * note 如果字符串中包含超出当前进制范围的字符转换将提前终止并返回已累加的结果。 * warning 该函数仅支持 2 到 36 进制超出此范围将直接返回 0。 */intmy_atoi_base(constchar*str,intbase){// 前置校验空指针与非法进制范围if(strNULL)return0;if(base2||base36)return0;intresult0;intsign1;inti0;intdigit;// 1. 预处理跳过前导空格while(isspace(str[i]))i;// 2. 预处理处理正负符号if(str[i]-){sign-1;i;}elseif(str[i]){i;}// 3. 预处理处理十六进制前缀 (0x 或 0X)if(base16str[i]0(str[i1]x||str[i1]X)){i2;}// 4. 核心转换循环while(str[i]){// 将字符映射为对应的数值if(str[i]0str[i]9){digitstr[i]-0;}elseif(str[i]Astr[i]Z){digitstr[i]-A10;}elseif(str[i]astr[i]z){digitstr[i]-a10;}else{break;// 遇到非数字/字母字符提前终止}// 校验当前数值是否超出进制范围如二进制中出现 2if(digitbase)break;// 溢出检测防止 result * base digit 超出 int 范围if(sign1result(INT_MAX-digit)/base){returnINT_MAX;}if(sign-1-result(INT_MINdigit)/base){returnINT_MIN;}// 秦九韶算法累加resultresult*basedigit;i;}returnresult*sign;}/** * brief 主函数用于测试 my_atoi_base 转换逻辑 * return 0 表示程序正常退出 */intmain(){// 测试用例 1十六进制转换带 0x 前缀printf(十六进制 0x1A 转十进制: %d\n,my_atoi_base(0x1A,16));// 测试用例 2二进制转换printf(二进制 1011 转十进制: %d\n,my_atoi_base(1011,2));// 测试用例 3带负号的十进制转换printf(十进制 -100 转十进制: %d\n,my_atoi_base(-100,10));// 测试用例 4三十六进制转换最大支持进制printf(三十六进制 Z 转十进制: %d\n,my_atoi_base(Z,36));// 测试用例 5溢出测试与非法输入测试printf(非法进制(1)测试: %d\n,my_atoi_base(101,1));printf(空指针测试: %d\n,my_atoi_base(NULL,10));return0;}

相关推荐

基于Django的电信资费管理系统开题报告
基于Django的电信资费管理系统开题报告

一、课题研究背景 随着通信行业数字化转型持续深化,电信用户规模持续扩张、通信业务类型不断丰富,涵盖手机流量、语音通话、短信服务、宽带套餐、增值业务等多元化服务品类,不同用户群体、不同使用场景对应差异化资费标准,使得电信… · 2026/10/25 0:06:30

可调混合喷嘴喷头龙头厂家
可调混合喷嘴喷头龙头厂家

广州育詹仁喷嘴厂家:为可调混合喷嘴喷头龙头市场注入新活力在当今工业生产和日常生活中,可调混合喷嘴喷头龙头的应用日益广泛。而广州育詹仁喷嘴厂家作为行业内的重要参与者,正凭借自身的实力与特色在市场上崭露头角。先进的技术支撑广州育詹… · 2026/10/31 13:19:45

程序员必备的三大网络诊断命令:ping、telnet与curl
程序员必备的三大网络诊断命令:ping、telnet与curl

1. 为什么程序员必须掌握这三个网络命令 在互联网技术领域,网络调试和故障排查占据了程序员日常工作的30%以上时间。根据Stack Overflow开发者调查报告显示,近60%的初级开发者遇到的第一个生产环境问题都与网络连接相关。而telnet、ping和curl这三个看似… · 2026/11/8 17:49:43

濮阳电工证怎么查询内部消息学历不高也能考
濮阳电工证怎么查询内部消息学历不高也能考

濮阳电工证怎么查询内部消息学历不高也能考 你是不是也担心学历不高怕报不上名?别急, 濮阳电工证怎么查询 这事儿,其实比你想象中简单,而且 内部消息… · 2026/11/14 10:55:29

延长县高压电工证丢了怎么补办?值不值得考?打工人必须知道的干货
延长县高压电工证丢了怎么补办?值不值得考?打工人必须知道的干货

延长县高压电工证丢了怎么补办?值不值得考?打工人必须知道的干货 你是不是正为找不到工作发愁?是不是已经拿到offer却因为缺少一张【延长县高压电工证】而被拒之门外?别急,这篇文章讲的就是你最关心的——高压电工证到底值不值得考,丢了之后怎么补… · 2026/11/14 10:55:29

南京技师学院电工证报名费多少钱?郑州报考避坑指南全解析
南京技师学院电工证报名费多少钱?郑州报考避坑指南全解析

南京技师学院电工证报名费多少钱?郑州报考避坑指南全解析 你是不是正在找电工证,想着尽快上岗拿工资?别急,先弄清楚南京技师学院电工证到底值不值得考,报名费怎么算,郑州那边又是怎么避坑的,这些都得搞明白。… · 2026/11/14 10:55:29

洛阳涧西区建筑工人急需闫永现电工证,内部消息透露最新考试重点
洛阳涧西区建筑工人急需闫永现电工证,内部消息透露最新考试重点

洛阳涧西区建筑工人急需闫永现电工证,内部消息透露最新考试重点 你是不是还在为找不到电工工作发愁?手里没有闫永现电工证,别说进工地,连面试资格都没了。最近洛阳涧西区不少建筑工人都在打听闫永现电工证考试的消息,因为 内部消息… · 2026/11/14 10:55:29

考特种工18道模拟题官方回应实操考试怎么考才稳
考特种工18道模拟题官方回应实操考试怎么考才稳

考特种工18道模拟题官方回应实操考试怎么考才稳 实操考试心里没底怕挂科?考特种工18道模拟题官方回应来了,实操考试怎么考、怎么准备,一篇文章讲清楚。 特种作业证实操考试到底考什么?… · 2026/11/14 10:55:29

嵊州电工证多久拿证?实操考试心里没底怕挂科?教你一招拿证快人一步
嵊州电工证多久拿证?实操考试心里没底怕挂科?教你一招拿证快人一步

嵊州电工证多久拿证?实操考试心里没底怕挂科?教你一招拿证快人一步 实操考试心里没底怕挂科,这几乎是每个准备考【嵊州电工证】的学员心中的共同焦虑。特别是对于刚从其他岗位转岗过来的新乡人来说,对电工证的考试流程、拿证时间、考试内容都不熟悉,生怕… · 2026/11/14 10:54:28

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/13 22:30:50

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43

有初级电工证怎么工作 2026河南最新政策怎么应对
有初级电工证怎么工作 2026河南最新政策怎么应对

有初级电工证怎么工作 2026河南最新政策怎么应对 之前考的证在外省能不能转过来?这个问题我每天被问上百次。2026年河南最新政策对证书跨省转移有了明确说明,特别是南阳市的从业者,需要特别关注。… · 2026/11/14 0:00:31

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略
电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略

电工证过期了不知道怎么复审?考电工证自学书+官方报名入口全攻略 证书过期了不知道怎么复审延期?很多人遇到这种情况,要么是工作太忙没时间处理,要么是不知道具体流程,导致证书失效,影响工作和项目进展。其实复审并不难,关键是要找准官方报名入口,掌… · 2026/11/14 0:00:31

为什么要低压电工证实操考试考什么
为什么要低压电工证实操考试考什么

为什么低压电工证值不值得考?别再被中介骗了 你是不是也经常看到网上有人在问“低压电工证到底值不值得考”?或者在找报名点时,担心被中间人骗钱?这些问题,我懂,我也经历过。作为一名在应急管理行业摸爬滚打多年的从业者,我深知低压电工证不仅是一个从… · 2026/11/14 0:00:31

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码