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

利用sprintf与snprintf巧妙实现数值变量转换为字符串型

0.前情提要

这是在搞STM32开发时遇到的一个问题,要将数字通过串口发送给上位机,但是HAL库中的HAL_UART_Transmit函数只接受uint8_t *类型的参数,因此我们需要通过一个函数先将数值类型变量转换为char *字符串,再强制类型转换为uint8_t *类型的数组。经过上网查询,我发现sprintf函数与snprintf函数可以方便的解决这个问题。

1.直!接!来!吧!

该函数的原型为int sprintf(char *dest, const char *format, ...);,其中*dest为格式化字符串的缓冲区,*format为格式化字符串(后面的参数用法和printf函数几乎一样,可以理解为该函数就让是printf函数原本输出到屏幕上的内容输出到*dest中。)
示例代码:

点击查看代码
char* intToString(int num) {static char buffer[20]; // 静态数组,足够存储32位整数snprintf(buffer, sizeof(buffer), "%d", num);return buffer;
}

该方法有可能输出内容太长导致缓冲区溢出,不过对于一般的应用场景来说足够用了。
为了防止这种状态的发生,可以使用snprintf()函数,该函数的原型为int snprintf ( char * str, size_t size, const char * format, ... );,其中size参数为要写入的字符的最大数目。如果格式化后的字符串长度超过了size-1,则snprintf()只会写入size-1个字符,并在字符串的末尾添加一个空字符(\0)以表示字符串的结束。
这两个函数的返回值规则是一样的:

  • 如果成功,返回将要写入的字符数(不包括结尾的空字符),即使这个值大于size
  • 如果发生编码错误,返回负值。

先写这么多吧我要睡了明天怎么还有早八高数啊啊啊啊啊

http://www.rkmt.cn/news/17934.html

相关文章:

  • Helmholtz-Gibbs自由能与熵弹性
  • Rust 的验证码图像识别系统设计与实现
  • ROIR 2023
  • 基于 C 语言的验证码图像识别系统实现
  • C++篇:003
  • oppoR9m刷Linux系统: 引导知识
  • 安装Docker(CentOS安装Docker,CentOS7安装DockerCompose,Docker镜像仓库) - a
  • 所有文档每页的第一行居中对齐
  • 上代码演示下Profile-Guided Optimization (PGO)
  • day008
  • IRB-120机械臂socket通信接受上位机指令运行程序段
  • tornado异步操作数据库-mysql
  • 实用指南:制冷剂中表压对应温度值的获取(Selenium)
  • Git克隆项目运行指南
  • OpenCV——批量读取可视化图片 - 指南
  • 各种B站客户端
  • CSP-S模拟27
  • 模型训练技巧 - -一叶知秋
  • WPF mvvm datagrid export as pdf via iTextSharp
  • 日总结 9
  • kettle插件-国产数据库瀚高插件,助力国产数据库腾飞
  • 实用指南:provthrd.dll propsys.dll profsvc.dll profprov.dll procinst.dll prntvpt.dll prnntfy.dll
  • 37 ACwing 298 Fence 题解
  • 35 ACwing 297 The Battle Chibi 题解
  • 一款由网易出品的免费、低延迟、专业的远程控制软件,支持手机、平板、Mac 、PC、TV 与掌机等多设备远控电脑!
  • aardio跨窗口传递变量
  • AI在简单视觉推理谜题中的挑战
  • new day
  • MyBatis-Plus 的 QueryWrapper 应用以及在内存中处理JSON数组字符串匹配
  • 从 ZooKeeper 到 ELK:分布式中间件与日志分析系统全解析 - 教程