我是靠谱客的博主 鲤鱼羽毛,这篇文章主要介绍Linux环境C语言把整数转换成字符串再保存该字符串数据为文本,现在分享给大家,希望可以做个参考。

一、前言

  1. 刚步入社会工作,只是想把自己做的事情做一个记录,同时也可以分享给网友,虽然都是些基础,但领导说得很对,细节非常重要;
  2. 本测试程序非常简单,对本人来说,意义在于读取电池放电的采样数据,然后把得到的离散数据用excel绘制成一条放电曲线,找到电池满电以及空点的临界点,最后应用到应用层的电池充放电的图标绘制;

二、代码说明

1. 打开要保存文件的方式

linux环境支持的文件打开的几种方式,可以用man fopen进行查看,如下:
这里写图片描述

复制代码
1
2
跟我在以前谭浩强C语言课本中看到的有点不一样,还有b选项,我采用的是“a+”模式,当文件关闭后,可以继续追加写; fp = fopen("/usr/value_ad.txt","a+");

2. 整数转换字符串再存取

开始准备fwrite()进行写操作的,后来发现还是把整数转换成字符串存入文件更方便,经查阅资料发现,非linux环境下的整数转换字符串除了支持 sprintf()函数外,还支持itoa()函数,在此针对linux环境就只采用sprintf()函数;
通过fputs()函数进行写,需添加头文件#include

复制代码
1
2
sprintf(str,"%d",data); fputs(str,fp);

3. linux环境与windows环境的换行格式的差别

在每次写一个字符窜数据之后,都要写一个换行符,如果采用如下代码:

复制代码
1
fputs("n",fp)

在linux打开保存的文件如下:
这里写图片描述
但在windows下面打开该文件的数据排版如下:
这里写图片描述
解决该问题的方法如下:
利用“rn”替换“n”,即

复制代码
1
fputs("rn",fp)

源码及测试

以下源码为我单独编写的,思路都是一样,数据来源不一样而已;

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h> #include <stdlib.h> #define READ_DATA_COUNT 20 #define OPEN_FILE_COUNT 5 int main(int argc,char **argv){ int data = 222;//模拟读取的数据 int count = 0;//记录所读取数据的次数,再进行存取操作 int saveData_perOpen = 0;//每次打开设备文件所要所存数据的数量 char str[25]; FILE *fp; if((fp = fopen("/usr/value_ad.txt","a+")) == NULL)//打开设备文件 { printf("cannot open this filen"); return 0; } //如果自己测试就把while(1)改成有限循环来执行; while(1){//因为要测试电池的AD值,并不知道循环具体的终止条件,那么就让嵌入式设备自动关机来结束 data++; count++; if(count%READ_DATA_COUNT == 0){//因为采样的数据频率快,我选择每读取20个数据存一次 printf("%dn", data); sprintf(str,"%d",data);//整数转换字符串 if(fputs(str,fp) == '')//写字符串 { printf("cannot open filen"); return 0; } fputs("rn",fp);//写换行符 count = 0; saveData_perOpen++; if (saveData_perOpen == OPEN_FILE_COUNT)//如果不采用这个if,估计设备关机是不会执行fclose()函数的(我直接用ctrl+c终止后台测试的),数据就不能保存成功,所以采用一种比较笨的方法,每存5个数时关闭文件再打开,还可以fflush()函数刷新; { fclose(fp);//关闭设备文件 if((fp = fopen("/usr/value_ad.txt","a+")) == NULL)//重新打开设备文件 { printf("cannot open this filen"); return 0; } saveData_perOpen = 0; } } } fclose(fp);//关闭设备文件 return 0; }

在采集的2万多个数据中,存取了1500个左右的数据,然后用所得的数据绘制成一张电池的放电曲线,如下图:
这里写图片描述
这里写图片描述
开始的数据可能是接了外接电源的缘故,AD值会大一些,但不会影响整个曲线趋势的大体走向。

最后

以上就是鲤鱼羽毛最近收集整理的关于Linux环境C语言把整数转换成字符串再保存该字符串数据为文本的全部内容,更多相关Linux环境C语言把整数转换成字符串再保存该字符串数据为文本内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(88)

评论列表共有 0 条评论

立即
投稿
返回
顶部