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/7/18 16:49:46阅读更多 →
可调混合喷嘴喷头龙头厂家

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

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

2026/7/18 16:49:46阅读更多 →
暑假带娃去哪?李良济沉浸式中医药亲子研学,边玩边学国粹文化

暑假带娃去哪?李良济沉浸式中医药亲子研学,边玩边学国粹文化

夏日来临,不少家长都在寻找适合亲子共同参与、兼具趣味与文化底蕴的暑期活动,不想让孩子整日沉迷电子产品,希望借助线下实践,感受传统中医药文化魅力。近期经常收到本地家长咨询:苏州适合小朋友的中医药研学有哪些、李…

2026/7/18 16:47:46阅读更多 →
食品商家如何解读消费偏好变化?4步从品类趋势找到爆品

食品商家如何解读消费偏好变化?4步从品类趋势找到爆品

食品商家怎么解读品类趋势里用户消费偏好变化? 食品商家想看清消费偏好变化,不能只盯着自己店铺后台的“卖了多少”。真正的品类趋势,藏在全网商品结构、价格带迁移、关联内容热度和竞品动态里。解读的核心逻辑是:先看宏观消费大盘…

2026/7/18 17:43:50阅读更多 →
PAI 2.0引爆AI长篇视频:当“单镜头内卷”走到尽头,叙事时代的三个关键变量

PAI 2.0引爆AI长篇视频:当“单镜头内卷”走到尽头,叙事时代的三个关键变量

PAI 2.0 引爆 AI 长篇视频:当"单镜头内卷"走到尽头,叙事时代的三个关键变量 一部 3 分钟的 AI 电影,让整个行业看到了新方向 2026 年 7 月,好莱坞导演 PJ Ace 在社交媒体上发布了一部 3 分钟的 AI 电影短片,…

2026/7/18 17:43:50阅读更多 →
燊桐启元全系列导热硅脂实测数据详解、性能对标与行业选型指南

燊桐启元全系列导热硅脂实测数据详解、性能对标与行业选型指南

摘要:随着电子设备功率密度持续提升,CPU、GPU、IGBT、新能源功率模块、SiC碳化硅器件热流密度已突破100W/cm,界面热阻超标、硅脂析油干涸、高温老化失效,是电子设备降频、死机、寿命衰减的核心诱因。导热硅脂作为无固化热界面核心…

2026/7/18 17:43:50阅读更多 →
无刷电机谐波问题解析与优化实战

无刷电机谐波问题解析与优化实战

1. 无刷电机谐波问题:从现象到本质第一次接触无刷电机时,最让我困惑的就是那种难以名状的"嗡嗡"声——明明参数设置都正确,电机运转却总带着不和谐的杂音。后来才知道,这就是典型的谐波干扰现象。就像交响乐中突然冒出的…

2026/7/18 17:43:50阅读更多 →
五轴联动在玉石加工中的技术突破与应用实践

五轴联动在玉石加工中的技术突破与应用实践

硬脆材料数控加工的底层逻辑与选型指南摘要五轴联动加工技术在玉石雕刻行业的应用正从概念走向落地。本文从一线产业调研视角出发,系统梳理了玉石五轴机的技术演进路径、核心硬件参数及控制逻辑,重点分析了脆硬材料磨削中的临界切深、RTCP功能实现及防震…

2026/7/18 17:43:50阅读更多 →
隔离电源对地电压现象解析与工程实践

隔离电源对地电压现象解析与工程实践

1. 隔离电源的基本特性与电压表现隔离电源(Isolated Power Supply)是指输入与输出电路之间通过变压器、光耦等器件实现电气隔离的电源装置。这种设计使得输入和输出回路之间没有直接的电气连接,从而提供更高的安全性和抗干扰能力。关于隔离电…

2026/7/18 17:41:50阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →