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

【STM32 C 语言入门】什么是强制类型转换?小白也能秒懂!

一、什么是强制类型转换一句话讲透强制类型转换就是“强行把一种数据类型变成另一种数据类型”。打个比方你手里拿着一个苹果int类型但函数只收橙子枚举类型强制类型转换 把苹果包装成橙子让函数能接收C语言里格式(目标类型)变量/数值二、为什么要用强制类型转换最常见3种场景场景1数字 ↔ 枚举STM32开发最常用很多STM32驱动里LED、按键、电机编号都用**枚举enum**表示// 枚举LED编号本质是数字 0、1、2...typedefenum{LED00,LED11,LED22}emLedDevNumTdf;函数要求传“枚举类型”但循环里只有“数字i”循环变量iuint8_t纯数字0/1/2函数参数emLedDevNumTdf枚举类型类型不匹配直接报错// 错误类型不匹配数字≠枚举vLedOn(i);强制类型转换把数字i → 枚举类型// 正确把uint8_t的i强制转为emLedDevNumTdfvLedOn((emLedDevNumTdf)i);场景2整数 ↔ 小数避免除法丢精度C语言里整数÷整数整数会丢掉小数inta5,b2;floatresa/b;// 结果2错误丢了0.5强制转小数保留精度floatres(float)a/b;// 结果2.5正确场景3大类型 ↔ 小类型注意数据溢出int4字节→char1字节强制截断只留低8位intnum257;charch(char)num;// 257二进制100000001 → 截断后1三、STM32实战例子LED跑马灯小白必看1. 定义LED枚举驱动里写好的// LED编号枚举typedefenum{LED00,LED11,LED22,LED33}emLedDevNumTdf;// 点亮LED函数参数必须是枚举类型voidvLedOn(emLedDevNumTdf emDevNum);2. 错误写法直接传数字编译报错voidvTestExecute(){uint8_ti;// 循环点亮LED0~LED3for(i0;i4;i){vLedOn(i);// ❌ 报错uint8_t 不能转 emLedDevNumTdfHAL_Delay(100);}}3. 正确写法加强制类型转换编译通过voidvTestExecute(){uint8_ti;for(i0;i4;i){// ✅ 核心把数字i强制转为LED枚举类型vLedOn((emLedDevNumTdf)i);HAL_Delay(100);}}4. 代码运行效果i0 →(emLedDevNumTdf)0→ LED0亮i1 →(emLedDevNumTdf)1→ LED1亮…以此类推实现跑马灯四、强制类型转换的3个核心要点小白记牢格式固定(目标类型) 数据括号不能少不改变原变量只在本次运算临时转换i还是uint8_t类型要匹配目标类型要和函数参数/变量类型一致五、强制类型转换常见错误 避坑指南小白必看强制类型转换好用但乱用必出bug、甚至程序跑飞下面总结5个最常见错误对应例子正确写法看完直接避坑。错误1类型写错目标类型和实际不匹配现象想把数字转枚举却写错枚举名或想转float却写int直接编译报错/运行异常。错误例子// 枚举名emLedDevNumTdfvLedOn((uint8_t)i);// ❌ 写成uint8_t类型不匹配编译报错// 想算小数却写成intinta5,b2;floatres(int)a/b;// ❌ 转int没用结果还是2正确写法vLedOn((emLedDevNumTdf)i);// ✅ 目标类型和函数参数一致floatres(float)a/b;// ✅ 转float结果2.5避坑目标类型必须和“要赋值/要传入的变量/函数参数类型完全一致”别凭感觉写错误2强制转换后数据溢出数值太大小类型装不下现象大数值转小类型比如int→char、uint16_t→uint8_t数值超出小类型范围数据被截断、结果完全错误小白最容易踩例子uint8_t范围0~255uint16_t范围0~65535错误例子uint16_tnum300;uint8_tch(uint8_t)num;// ❌ 300255溢出// 300二进制100101100 → 截断低8位0101100 → 十进制44// 结果ch44和预期300完全不符正确写法先判断数值范围不溢出再转或换大类型存储uint16_tnum300;if(num255){uint8_tch(uint8_t)num;// ✅ 安全}else{// 处理溢出比如报错、限制最大值}避坑小类型存不下大数值强制转换数据丢失转之前先查范围STM32里uint8_t/char尤其要注意。错误3转换顺序错只转第一个数没转整体现象想做小数除法只转了第一个数第二个没转或想转整个表达式却只转了变量结果还是整数白转了。错误例子inta5,b2;floatres(float)a/b;// ✅ 正确floatres2(float)(a/b);// ❌ 先算a/b2再转float2.0没用正确写法只转“参与运算的其中一个整数”让整个表达式变成浮点运算floatres(float)a/b;// ✅ 5.0/22.5避坑强制转换优先级高于加减乘除别把整个表达式包起来错误4枚举超出定义范围数字超过枚举最大值现象枚举只定义了LED0LED303循环却跑到4/5强制转换后传入函数数组越界、程序卡死/跑飞STM32里致命错误例子// 枚举LED0~LED30~3typedefenum{LED00,LED1,LED2,LED3}emLedDevNumTdf;voidvTestExecute(){uint8_ti;for(i0;i5;i)// ❌ 跑到i4超出枚举范围{vLedOn((emLedDevNumTdf)i);// 数组越界程序崩溃HAL_Delay(100);}}正确写法循环范围和枚举定义范围完全一致for(i0;i4;i)// ✅ 只到3和枚举匹配{vLedOn((emLedDevNumTdf)i);}避坑枚举有几个值循环就跑几次别多跑数组越界是STM32程序崩溃的高频原因。错误5画蛇添足没必要的强制转换现象变量类型已经匹配还多加一层强制转换代码冗余、可读性差虽然不报错但没必要。错误例子uint8_ti1;uint8_tj(uint8_t)i;// ❌ i已经是uint8_t多此一举emLedDevNumTdf ledLED0;vLedOn((emLedDevNumTdf)led);// ❌ led已经是枚举没必要转正确写法类型匹配就直接用不用画蛇添足uint8_tji;vLedOn(led);避坑能不转就不转只在类型不匹配时用代码越简洁bug越少。六、总结强制类型转换就是C语言的“类型翻译器”把不匹配的数据类型临时转成需要的类型在STM32开发尤其是LED、按键、电机控制中高频使用。记住3句话格式(目标类型) 数据括号别丢避坑别写错类型、别溢出、别越界、别乱转核心只在类型不匹配时用匹配就直接用。小白掌握这些就能轻松用好强制类型转换避开90%的常见bug

相关文章:

【STM32 C 语言入门】什么是强制类型转换?小白也能秒懂!

一、什么是强制类型转换?一句话讲透 强制类型转换,就是“强行把一种数据类型,变成另一种数据类型”。 打个比方: 你手里拿着一个苹果(int类型)但函数只收橙子(枚举类型)强制类型转换…...

3D光学流技术在机器人动作生成中的应用与优化

1. 3D光学流技术解析与机器人动作生成3D光学流技术是计算机视觉领域的重要突破,它通过分析物体在三维空间中的连续运动轨迹,为机器人动作规划提供了前所未有的精确度。传统2D光学流仅能捕捉平面运动信息,而3D光学流则能完整重建物体在XYZ三个…...

从‘看山是山’到‘看山不是山’:手把手教你用Landsat8波段组合玩转地物‘透视’

给地球戴上X光眼镜:Landsat8波段组合的视觉魔法手册第一次接触遥感影像的人,常会惊讶于同一片土地在不同"滤镜"下竟能呈现截然不同的面貌——茂密的森林在某张图上如火炬般鲜红耀眼,在另一张图中却消失不见;平静的湖面时…...

Nsight System和Compute命令行

Nsight System分析 nsys profile --tracecuda,nvtx --gpu-metrics-devicesall -o <out_file_name> python <python_file_name> <python args>示例 nsys profile --tracecuda,nvtx --gpu-metrics-devicesall -o profile_attention_bm128_bn64_w4_s2 python my…...

从集合运算到代码:一文搞懂Jaccard系数,附Python/NumPy/Pandas三种实现方法对比

从集合运算到代码&#xff1a;一文搞懂Jaccard系数&#xff0c;附Python/NumPy/Pandas三种实现方法对比在数据挖掘和机器学习领域&#xff0c;衡量两个集合的相似度是一项基础而重要的任务。Jaccard相似系数作为一种简单直观的度量方法&#xff0c;广泛应用于推荐系统、文本挖掘…...

不用开WPS会员了!这一款电子发票批量打印工具:支持排版 + OCR识别,完全免费!

软件下载 夸克下载&#xff1a;https://pan.quark.cn/s/39d9ed085809 软件介绍 今天给大家带来的是Office的代替品&#xff0c;LibreOffice不用激活、完全免费&#xff0c;非常好用&#xff01; 软件支持Windows、macOS、Linux。它包括包含 Writer&#xff08;文字处理&…...

MNIST识别项目复盘:除了准确率97%,我们更应该关注数据预处理与损失函数的选择

MNIST识别项目深度复盘&#xff1a;超越97%准确率的工程实践思考 在完成一个基础的MNIST手写数字识别项目后&#xff0c;很多开发者会满足于模型达到97%的准确率便止步不前。然而&#xff0c;真正有价值的机器学习实践远不止于调出一个高准确率的模型。本文将带您深入两个常被忽…...

人工智能通识课:深度学习框架 PyTorch

深度学习框架是连接算法理论与工程实践的重要工具。它让开发者不必从零实现张量运算、自动求导、参数更新、GPU 调度和模型保存等底层细节&#xff0c;而可以把主要精力放在数据处理、模型结构设计、训练策略和实验验证上。在众多深度学习框架中&#xff0c;PyTorch 凭借直观的…...

LLM:大语言模型的主要任务

大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是以深度学习为基础、通过大规模文本或多模态数据训练得到的生成式模型。它的核心能力并不是完成某一个固定任务&#xff0c;而是围绕语言理解、文本生成、信息处理、推理协助、代码生成、工具调用和多模…...

AI 术语通俗词典:RAG

RAG 是大语言模型、自然语言处理、知识问答、智能客服、企业知识库和 AI 应用开发中非常重要的一个术语&#xff0c;全称是 Retrieval-Augmented Generation&#xff0c;通常翻译为“检索增强生成”。它用来描述一种让大语言模型先从外部资料中检索相关内容&#xff0c;再基于这…...

ChatGPT生成图表总“丑”?3步精准调优Prompt+4类D3.js/Plotly适配模板,即刻提升专业度

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT数据可视化建议 在利用ChatGPT辅助数据分析与可视化时&#xff0c;关键在于将模型生成的结构化洞察高效映射到视觉表达层。ChatGPT本身不直接渲染图表&#xff0c;但可精准生成符合主流库&#…...

ICLR 2026小米AI 技术深度解读

注&#xff1a;小米最新的 AI 顶会成果实际入选了 ICLR 2026&#xff08;国际学习表征会议&#xff09;&#xff0c;推测您提到的 ICML 为会议名称的混淆&#xff0c;本文将基于小米此次入选的核心研究成果&#xff0c;以及配套的 MiMo-V2.5 系列技术&#xff0c;按您要求的五大…...

【深度解析】从 Mythos 到 DeepSeek 降价:大模型工程化选型、成本控制与 API 实战

摘要 近期 AI 大模型市场持续加速迭代&#xff1a;Anthropic Mythos 进入部署测试信号增强&#xff0c;OpenAI、Gemini 系列持续升级&#xff0c;DeepSeek 则通过永久降价重塑开发成本结构。本文从工程视角解析模型发布信号、Agentic 系统成本模型&#xff0c;并给出 OpenAI 兼…...

Android 框架入门到实战:从系统架构到四大组件,面试官问的全在这了(附流程图)

Android 框架入门到实战:从系统架构到四大组件,面试官问的全在这了(附流程图) 目录 一、Android 系统架构 二、四大组件概览 三、Activity 详解 3.1 生命周期 3.2 四种启动模式 3.3 Activity 之间的数据传递 四、Service 详解 五、BroadcastReceiver 详解 六、ContentProv…...

OpenCV实战:用Python从零实现Canny边缘检测(含完整代码与调参技巧)

OpenCV实战&#xff1a;用Python从零实现Canny边缘检测&#xff08;含完整代码与调参技巧&#xff09;计算机视觉领域中&#xff0c;边缘检测是图像分析的基础步骤之一。1986年由John F. Canny提出的Canny边缘检测算法&#xff0c;至今仍是效果最佳的边缘检测方法之一。本文将带…...

从‘栅栏’看频谱:一个音频信号处理的例子,讲透FFT分辨率与泄漏的权衡

从‘栅栏’看频谱&#xff1a;一个音频信号处理的例子&#xff0c;讲透FFT分辨率与泄漏的权衡想象你正在调试一段钢琴录音&#xff0c;其中有两个非常接近的音符——比如C4&#xff08;261.63Hz&#xff09;和C#4&#xff08;277.18Hz&#xff09;。在频谱分析仪上&#xff0c;…...

破解‘特质波动率之谜’?用Python回测A股创业板数据,看看风险与收益到底啥关系

特质波动率与A股创业板收益关系的Python实证研究 现象背后的思考&#xff1a;为什么特质波动率会引发争议&#xff1f; 2006年Ang等人的研究像一颗投入金融学平静湖面的石子&#xff0c;激起了持续至今的涟漪。他们发现了一个与传统金融理论相悖的现象&#xff1a;高特质波动率…...

多重检验策略:提升NPLM信号无关搜索的鲁棒性与均匀性

1. 项目概述在粒子物理实验数据分析中&#xff0c;我们常常面临一个核心困境&#xff1a;我们不知道新物理信号会以何种形式出现。传统的“模型依赖”搜索&#xff0c;比如针对特定质量的希格斯玻色子或暗物质候选粒子&#xff0c;需要预先定义一个精确的理论模型。然而&#x…...

对称性自适应机器学习力场:高效精准计算碳纳米管声子谱

1. 项目概述&#xff1a;当机器学习“学会”了对称性在计算材料科学领域&#xff0c;我们常常面临一个经典的“精度-效率”困境。一方面&#xff0c;基于第一性原理的密度泛函理论&#xff08;DFT&#xff09;计算&#xff0c;能提供近乎量子力学精度的结果&#xff0c;是探索材…...

【AI问答/前端】前端瞒天过海局(三)

问三&#xff1a;还有一件事&#xff0c;就是浏览器按钮的前进后退&#xff0c;他真实还原了js改前端的过程&#xff0c;就好像真的有过访问纪录&#xff0c;这个是JS纪录下了自己的路由操作历史&#xff0c;改的浏览器地址栏&#xff1f;还是这个路由操作历史真的是写进了浏览…...

【AI问答/前端】现代前端的满天过海局(二)

现在JS能改浏览器的东西了?他不是被限在操作html里面了吗?笼子里面的狗不可能自己把门外的插销打开吧?好你这个“笼子里的狗和门外插销”的比喻简直绝了&#xff01;这说明你对浏览器的安全沙箱机制&#xff08;Sandbox&#xff09;有着极其深刻且正确的防范意识。你的直觉没…...

Android 全栈体系 150 讲 - 49 深度完整版 Android 常用设计模式 + 架构模式 源码剖析、业务落地、面试精讲

...

基于静态动态障碍物DWA、DWA+RRT*、改进A*、RRT* 2D和3D的路径规划算法Matlab代码

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f381…...

基于Simulink的四开关buck-boost变换器闭环仿真模型

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f381…...

FPG平台:行业前景下的战略定位评估

FPG平台&#xff1a;行业前景下的战略定位评估金融服务行业的复杂性决定了平台需要在多个维度上同时具备较高的水准。FPG平台经过多年的发展&#xff0c;已经在合规、技术、服务、教育等方面形成了一套相互支撑的体系。本文从评测视角出发&#xff0c;对其综合实力进行多维度的…...

FPG平台:信息透明度建设的深度解析

FPG平台&#xff1a;信息透明度建设的深度解析金融服务行业的复杂性决定了平台需要在多个维度上同时具备较高的水准。FPG平台经过多年的发展&#xff0c;已经在合规、技术、服务、教育等方面形成了一套相互支撑的体系。本文从评测视角出发&#xff0c;对其综合实力进行多维度的…...

PostgreSQL COPY命令:高效数据导入的最佳实践

引言 在处理大量数据插入场景时&#xff0c;传统的INSERT语句往往会成为性能瓶颈。PostgreSQL提供了COPY命令&#xff0c;能够显著提升数据导入效率。本文将深入探讨COPY命令的工作原理、使用方法以及为什么它比普通INSERT更快。 什么是COPY命令&#xff1f; COPY是PostgreSQL提…...

阴阳师智能自动化脚本:5个步骤实现游戏任务全托管

阴阳师智能自动化脚本&#xff1a;5个步骤实现游戏任务全托管 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 还在为阴阳师中重复的日常任务感到厌倦吗&#xff1f;每天花费数小…...

[SpringBoot 对象存储实战]:预签名 URL 直传 OSS 全流程设计与实现

&#x1f525;你好我是fengxin_rou这是我的个人主页fengxin_rou的主页 ❄️欢迎查看我的专栏我的专栏 《Java后端学习》、《JAVASE基础》、《JUC并发》、《redis》、《JVM虚拟机》、《MYSQL》、《黑马点评》、《rabbitmq》、《JavaWebAI的talis学习系统》、《苍穹外卖》 目录…...

【SpringBoot+Elasticsearch 内容搜索系统实战】:架构设计与全流程实现

&#x1f525;你好我是fengxin_rou这是我的个人主页fengxin_rou的主页 ❄️欢迎查看我的专栏我的专栏 《Java后端学习》、《JAVASE基础》、《JUC并发》、《redis》、《JVM虚拟机》、《MYSQL》、《黑马点评》、《rabbitmq》、《JavaWebAI的talis学习系统》、《苍穹外卖》 目录…...