您的位置:程序门 -> c/c++ -> c++ 语言



求助 文件保存后 但打开文本看后 保存的是乱码


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求助 文件保存后 但打开文本看后 保存的是乱码[已结贴,结贴人:tan19830227]
发表于:2007-10-05 20:55:24 楼主

我想将从串口读入的数据保存到文本中   但都是乱码

程序如下:
void   filesave(*ptr)
{
  file   *stream;

  if(   (stream   =   fopen(   "fread.txt",   "w"   ))   !=   null   )
      fwrite(   ptr,   sizeof(   char   ),   1,   stream   );
      fclose(   stream   );

}

ptr是我欲保存的数据

请大家帮忙看一下是什么情况
发表于:2007-10-05 21:02:301楼 得分:0
sizeof(char)==1.   you   only   write   1   byte.   replace   it   with   length   you   want   to   wirte.
发表于:2007-10-05 21:05:482楼 得分:0

ptr如果是字符串,可以用strlen(ptr)获取长度
发表于:2007-10-05 22:37:573楼 得分:0

如果ptr是一个int   fsave[52]的数组  


应该怎么样写是正确的
发表于:2007-10-05 22:45:404楼 得分:0
c/c++ code
void filesave(*ptr) { file *stream; if( (stream = fopen( "fread.txt", "w" )) != null ) fwrite( ptr, strlen(ptr) , 1 , stream ); fclose( stream ); } //int fsave[52] 写入时遇到'\0'结束
发表于:2007-10-05 22:46:435楼 得分:0
52*sizeof(int)
发表于:2007-10-05 23:32:046楼 得分:0
楼上的方法我都试过了   还是不行
我把程序写详细点   请帮忙看看
void   filesave(char   *ptr)
{
  file   *stream;

  if(   (stream   =   fopen(   "fread.txt",   "wb"   ))   !=   null   )
      fwrite(   ptr,51*sizeof(char),1,   stream   );
      fclose(   stream   );

}

主文件实现
      char   fsave[51];
    for(int   i=0;i <51;i++)
          {
            fsave[i]=buffer[tail];//buffer[tail]是我从串口读进来存的数据   也是char型数组
            }
      filesave(   fsave);  
发表于:2007-10-06 09:18:417楼 得分:0
不如用c++的函数

c/c++ code
#include <ofstream.h> void filesave(char *ptr) { ofstream savefile; savefile.open(filepath,ios::trunc | ios::out); savefile << ptr << "\r\n"; savefile.close(); }
发表于:2007-10-06 11:30:368楼 得分:0
这个方法也不行啊
发表于:2007-10-06 12:36:009楼 得分:0
if(   (stream   =   fopen(   "fread.txt",   "w"   ))   !=   null   )  
{
      for(   int   i   =   0;   i   <   51;   i   ++   )
            fprintf(   stream,"%0x02x\n",ptr[i]   );
      fclose(   stream   );  
}
你这样把你的   fsave   中的数据以16进制保存到文件,看看是不是可见字符?
发表于:2007-10-06 13:22:5810楼 得分:0
谢谢啊   这样对了

0x表示十六进制吧?后面02x表示什么呢
发表于:2007-10-06 13:25:5711楼 得分:30
不好意思,上面的代码写错了,%   应该放0x后面的
应该是   fprintf(   stream,"0x%02x\n",ptr[i]   );  
%02x表示16进制数,宽两位,以0补齐。
发表于:2007-10-06 18:14:0912楼 得分:0
谢谢   问题解决了


快速检索

最新资讯
热门点击