sprintf函数和sscanf函数在LinuxC编解码中的简单应用

今天是2018年4月19日

是丙丙的第十二篇文章

最近看到超级丙发的笔记之后,我感到很焦虑,觉得自己必须也写一写笔记来记录一下,不然我怕过两个月之后,看之前的项目完全看不懂自己写的是什么东西,又要花费一天来回复记忆,囧!!!

我打算写一下自己在项目中用到的比较有用的知识点,通过在项目中使用这些知识点,提供一个具体的使用场景,来加深理解,也希望给大家带来一些借鉴。

今天我要介绍的是sprintf()scanf()函数,首先先把官方的介绍摆上去,然后将我在项目中的应用摆出来。

sprintf()

头文件:stdio.h

函数功能:格式化字符串,将格式化的数据写入字符串中。

函数原型:intsprintf(char *buffer, const char *format, [argument]...)

参数:

(1)buffer:是char类型的指针,指向写入的字符串指针;

(2)format:格式化字符串,即在程序中想要的格式;

(3)argument:可选参数,可以为任意类型的数据;

函数返回值:buffer指向的字符串的长度;

sscanf()

头文件:stdio.h

函数功能:从字符串读取格式化输入。

函数原型:intsscanf(const char *str, const char *format, ...)

参数

(1)str:这是 C 字符串,是函数检索数据的源。

(2)format: 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符和format 说明符。

(3)附加参数:这个函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象类型由 format 字符串中相应的 % 标签指定,参数与 % 标签的顺序相同。

返回值:

如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

在项目中的应用

最近在自己的项目中需要用到通讯协议,在Linux环境下利用C语言做开发,利用这两个函数提供了强大的便利,在客户端利用sprintf()来将自己的数据格式化为定长的字符串并进行打包,在服务器端利用sscanf()按照一定的解析规则将字符串中的数据解析出来并进行出来。

客户端编码代码如下:

代码介绍:将发送方的类型,数据的ID,本地收集的四项数据,控制命令等数据保存在结构体中,并将结构体中的各项数据利用sprintf()格式化成字符串保存在str字符数组中。

服务器端解码代码如下:

这次就仅仅将自己在项目过程中使用到的sprintf()和sscanf()一方面的应用罗列出来,方便自己以后回忆,不足的地方大家在网上都可以找到相应的例子,后期遇到了我再补上。

在此感谢一位不愿意透露姓名的网友勇哥投稿等我火了,我会给你稿费的。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180419G1WEO100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券