当前位置: 首页 > 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.hskmm.com/?act=detail&tid=27660

相关文章:

  • Helmholtz-Gibbs自由能与熵弹性
  • 日志|电话号码的字母组合|子集|回溯
  • Docker实用篇(初识Docker,Docker的基本操作,Dockerfile自定义镜像,Docker-Compose,Docker镜像仓库) - a
  • ROIR 2023
  • Rust 的验证码图像识别系统设计与实现
  • 【题解】P12992 [GCJ 2022 #1C] Intranets
  • ysyx:pa3.1批处理系统
  • C 语言的验证码图像识别系统实现
  • Nginx典型流控配置示例
  • 基于 C 语言的验证码图像识别系统实现
  • oppoR9m刷Linux系统: 引导知识
  • 操作系统知识点
  • JAVA: Mybatis添加xml执行多行更新语句时报错
  • 安装Docker(CentOS安装Docker,CentOS7安装DockerCompose,Docker镜像仓库) - a
  • 上代码演示下Profile-Guided Optimization (PGO)
  • 所有文档每页的第一行居中对齐
  • 109
  • 一个有趣的网站,可以给自己生成一个奖牌:aitokenawards.com
  • 20232416 2025-2026-1《网络与系统攻防技术》实验一实验报告
  • day008
  • lzr 的区间(interval)
  • IRB-120机械臂socket通信接受上位机指令运行程序段
  • 1.1.1.1 金融市场的定义与功能
  • 使用c#操作elasticsearch8
  • CF45C Dancing Lessons 题解
  • APUE学习笔记之文件IO(三) - Invinc
  • note
  • 供应链优化技术助力应对疫情挑战
  • 搜索关键词 - 呓语
  • 阅读《构建之法》产生的问题