Linux环境C语言把整数转换成字符串再保存该字符串数据为文本

原创 2017年01月03日 12:00:29

一、前言

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

二、代码说明

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

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

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

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

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

sprintf(str,"%d",data);
fputs(str,fp);

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

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

fputs("\n",fp)

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

fputs("\r\n",fp)

源码及测试

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

#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 file\n");
                 return 0;
         }
  //如果自己测试就把while(1)改成有限循环来执行;      
    while(1){//因为要测试电池的AD值,并不知道循环具体的终止条件,那么就让嵌入式设备自动关机来结束
        data++;
        count++;
                if(count%READ_DATA_COUNT == 0){//因为采样的数据频率快,我选择每读取20个数据存一次
                        printf("%d\n", data);
                        sprintf(str,"%d",data);//整数转换字符串
                        if(fputs(str,fp) == '\0')//写字符串
                        {
                                printf("cannot open file\n");
                                return 0;
                        }
                        fputs("\r\n",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 file\n");
                                        return 0;
                                }
                                saveData_perOpen = 0;
                        }
                }
    }
    fclose(fp);//关闭设备文件
    return 0;
}

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

linux中字符串转换函数 simple_strtoul

Linux内核中提供的一些字符串转换函数: lib/vsprintf.c 1. unsigned long long simple_strtoull(const char *cp, ...

linux下c/c++ 常用时间和字符串互相转化介绍

linux下c/c++ 常用时间和字符串互相转化函数介绍

Shell编程:字符串与数值之间的转换与计算

shell编程往往需要对字符串进行操作,有时需要将字符串转为数值,并做加减运算。以下介绍将字符串转为数值并进行计算的方法。 # temp1=400d7c # echo $((16#${te...

linux下数字转成字符串

原文地址 http://www.cnblogs.com/pony/archive/2007/12/26/1016113.html 用snprintf()好些     int ...

c语言实现将一个整数转换为字符串

#include void convert(int n) { int i; if ((i=n/10)!=0) convert(i); putchar(n%10+'0'); } int ...

转:C语言中把数字转换为字符串-sprintf

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出...
  • glorin
  • glorin
  • 2011-06-11 18:22
  • 15713

C/C++整型转字符串的几种方法

1,使用c语言函数  将整形数value转换为其等价的字符串   char *itoa(int value, char *string, int radix)   Parameters(参数说明)  ...
  • mnorst
  • mnorst
  • 2011-07-21 11:20
  • 8610

C语言整型和字符串之间的转换

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子:     # include     # inclu...

C语言中把数字转换为字符串

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出...

C语言atoi()函数:将字符串转换成int(整数)和sprintf和memset

atoi()函数 #include #include int main () { int i; char buffer[256]; printf ("Enter a n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)