C51中的sprintf()函数使用

这篇具有很好参考价值的文章主要介绍了C51中的sprintf()函数使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

一、函数作用

二、输出内容的格式化处理

1.输出变量的类型

2.输出变量的位数

小数:

整数:

16 进制:


  在做蓝桥杯第五届国赛试题的时候,遇到这样一个问题:题目要求单片机通过串口返回电脑一组数据,包括温度、湿度、时间等,数据很多问且中间有大括号等符号做间隔,如果一个字符一个字符的分开重新定义,发送的话就非常麻烦。通过上网学习,发现了一个非常有效的办法:sprintf()函数来实现。但是,在C51中的sprintf函数与标准C语言中有所差别,注意区分。经过上网查阅资料,特此总结一下。

首先,用这个函数的时候,前面要加上这个头文件:#include <stdio.h>

一、函数作用

  sprintf() 是格式化输出函数,保存字符串到缓冲区中,起到拼接字符串的作用。

函数介绍:   int sprintf(char *str, const char *format, ...);

参数:     str: 数据缓冲区,通常是一个字符串数组

                format:输出的内容

举个例子:

   int a = 10;

  char buf[100] = {0};

  sprintf(buf,"a = %d\n",a);   

  作用:将a的值放置到%d的位置,然后"a = 10\n"这句话保存到数组buf中。

说明:函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组,用来存储字符串),起到拼接字符串的作用。

又例如:

  sprintf(s, "%d", 123); //产生"123"  把整数123 打印成一个字符串保存在s 中。

二、输出内容的格式化处理

对于输出的内容,还要对他进行格式化的处理,也就是上面例子中双引号内的部分。

1.输出变量的类型

  b 表示字节数据;

  bd 表示 8 位有符号整数(256)(KEIL里扩展出了b,h,l来对输入字节宽的设置:b八位(256);h十六位(65535);l三十二位);

  bu 表示 8 位无符号整数;

  bx 表示 8 位十六进制整数;

  小数用f表示。

2.输出变量的位数

小数:

  自己控制打印的宽度和小数位数,这时就应该使用:“%m.nf”格式,其中m表示打印内容的总宽度,字符串长度不足时补空格,超出了则按照实际宽度打印;n表示小数点后的位数,也就是从相应的字符串中最多取用的字符数。比如:

sprintf(Tx_buf1, "%10.3f\r\n", 3.1415626);    // 产生:"     3.142″ 空格在左面产生

sprintf(Tx_buf1, "%-10.3f\r\n",3.1415626);   // 产生:"3.142     "  空格在右面产生

sprintf(Tx_buf1, "%.3f\r\n", 3.1415626);      // 不指定总宽度,产生:"3.142"

UART_TX(Tx_buf1);

整数:

  也是使用:“%m.nf”格式。m.n  m:打印内容的总宽度,字符串长度不足时补空格,超出了则对于输出整数:按照实际宽度打印;n: 总共输出几位整数,位数不够在前面加0,超出位数输出原数。

sprintf((char*)Tx_buf1,"{%bd-%bd%%}{%0.2bd-%0.2bd-%0.2bd}{%bd}\r\n",wendu,shidu,shijian[2],shijian[1],shijian[0],kaojin_flag);

//sprintf((char*)Tx_buf1,"{%bd-%bd%%}{%0.1bd-%0.2bd-%0.3bd}{%bd}\r\n",wendu,shidu,shijian[2],shijian[1],shijian[0],kaojin_flag);

//sprintf((char*)Tx_buf1,"{%bd-%bd%%}{%0.3bd-%0.2bd-%0.1bd}{%bd}\r\n",wendu,shidu,shijian[2],shijian[1],shijian[0],kaojin_flag);

//sprintf((char*)Tx_buf1,"{%bd-%bd%%}{%2.2bd-%2.2bd-%2.2bd}{%bd}\r\n",wendu,shidu,shijian[2],shijian[1],shijian[0],kaojin_flag);

//sprintf((char*)Tx_buf1,"{%bd-%bd%%}{%3.2bd-%3.2bd-%3.2bd}{%bd}\r\n",wendu,shidu,shijian[2],shijian[1],shijian[0],kaojin_flag);

测试结果:

0.2  0.2  0.2   三个变量都是两位数,不够前面加0
0.1  0.2  0.3   {23-59-059} {0-00-000} 第一个一位数,第二个两位数,第三个三位数;不够三位数前面补零;超过一位数输出原数
0.3  0.2  0.1   {023-59-59} {000-00-0} 第一个三位数,第二个两位数,第三个一位数;不够三位数前面补零;超过一位数输出原数
       由此可见,n:总共输出几位整数,位数不够在前面加0;超过位数输出原数
2.2  2.2  2.2   {23-59-59}  {00-00-00} 三个变量都是两位数,不够前面加0
3.2  3.2  3.2   { 23- 59- 59} { 00- 00- 00} 字符串长度不足时补空格,超出了则按照实际宽度打印

16 进制:

sprintf(Tx_buf1,"%8x\r\n",4567);    // 产生:"    11d7″ 总共8位字符,空格在左面产生,16进制小写
sprintf(Tx_buf1,"%-8X\r\n",4567);    // 产生:"11D7    ″ 总共8位字符,空格在右面产生,16进制大写

参考:

sprintf %m.ns %m.nf_mydriverc2的博客-CSDN博客_sprintf ”%m.nf”文章来源地址https://www.toymoban.com/news/detail-429543.html

到了这里,关于C51中的sprintf()函数使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用C51单片机实现红外遥控行为控制

    目录 引言 红外遥控原理 实现红外遥控功能 代码示例 结论

    2024年02月12日
    浏览(28)
  • 使用STM32和C51实现LED闪烁(仿真+程序)

    1、新建程序(如下图) 先点击project,在单击new uvision project。 2.命名文件 3.生成main文件 (右键source group再点击Add new item…) 点击c File (.c) 4.在main.c项目中输入以下代码 5.生成 .hex 文件 魔术棒- Output - 勾选Create HEX File - ok 1.上传.hex文件到proteus 双击芯片在program file 中选择刚刚

    2024年02月04日
    浏览(29)
  • C51单片机——通过使用定时器控制LED闪灭

    目录 0 引言 1 定时的原理 1.1 生活中的定时 1.2单片机中的定时器 2 C语言程序设计 2.1 定时器的内部功能 2.2 设置寄存器 2.3 实验程序 3 有两个小问题(算是延伸吧) 3.1 只能0.05s闪一次吗? 3.2 每次都要在草稿纸手算初始值好麻烦

    2024年02月06日
    浏览(59)
  • Laravel框架中的目录结构都有什么作用?

    Laravel框架安装完成后,会在C:lwebwwwlapavel目录下自动创建一些文件和目录。本节来了解一下框架中各个目录的作用。 Laravel框架一级目录的作用如表所示。 在熟悉了一级目录的作用后,下面来看一下Laravel框架常用的子目录和文件的作用,如下表所示。

    2024年02月07日
    浏览(38)
  • sprintf函数的用法

    sprintf函数调用的主要用途就是把一个字符串放在一个已知的字符数组里去。其实这是一个很常用的库函数,在解决某些OJ题的时候会经常用到它来帮助实现字符串的转移和储存。这里我就在简单的介绍一下其用法。  首先需要引入的头文件是   stdio.h 由上面的图片可知sprin

    2023年04月08日
    浏览(34)
  • 无涯教程-Perl - sprintf函数

    此函数使用FORMAT基于LIST中的值返回格式化的字符串。本质上与printf相同,但是返回格式化的字符串而不是将其打印。 以下是此函数的简单语法- 此函数返回SCALAR(格式化的文本字符串)。 以下是显示其基本用法的示例代码- 执行上述代码后,将产生以下输出- Perl 中的 sprintf函数

    2024年02月12日
    浏览(29)
  • C 语言的 sprintf() 函数

    stdio.h 原型: int sprintf(char *str, const char *format, …) 发送格式化输出到 str 所指向的字符串。 参数 str – 这是指向一个字符数组的指针,该数组存储了 C 字符串。 format – 这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加

    2024年02月12日
    浏览(26)
  • Eigen库中的Identity()函数作用

    今天学习Eigen库,看到示例代码中有这样一行: Matrix3d: Eigen库中typedef的数据类型,即“3*3矩阵(d表示矩阵内部数据类型为double类型)” rotation_matrix: 该3*3矩阵的变量名 Matrix3d::Identity() :在定义该矩阵变量时,创建一个同尺寸同数据类型的 单位阵 ,对其初始化。

    2024年02月11日
    浏览(27)
  • python中的dropna()函数的作用

    在Python中, dropna() 是一个Pandas库中的函数,用于从数据框(DataFrame)中删除包含缺失值(NaN)的行或列。它用于数据清洗和预处理阶段,以便去除缺失值,使数据更加规整。 dropna() 函数的语法如下: 参数说明: axis :可选参数,表示删除行还是列。默认值为0,表示删除包含

    2024年02月07日
    浏览(28)
  • CSS中的calc()函数有什么作用?

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包