| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2556 人关注过本帖
标题:百思不得其解,只是按二进制读取,然后写入新文件中,为什么新文件多除了24 ...
取消只看楼主 加入收藏
lyhinsohu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-3-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:1 
百思不得其解,只是按二进制读取,然后写入新文件中,为什么新文件多除了240个字节?
这个程序是读取二进制文件,然后再写入新文件,但是现在新文件中结尾多了240个字节的0,不知什么原因。

int main(int argc, char *argv[])
{
    FILE *segy_in;  /*输入segy数据指针*/
    FILE *segy_out; /*输出segy文件指针*/
    unsigned char temp;      /*作为临时变量*/
    int samp_code=0;     /*数据格式码*/
    int samp_num=0;      /*每道的采样点数*/
    long int cc=0;
    long int dd=0;           
    float aaa[10000]={0.0}; /*临时存储样点值*/
   
   
    unsigned char a,b,c,d;

   
    int i=0;
    int j=0;
    int k=0;
   
   
    segy_out=fopen("d:\\5937ff.sgy","wb");
   
    if((segy_in=fopen("d:\\5937-ffid2.sgy","rb"))==NULL)
        {
            printf("cant open the file");
             return 0;
        }
   
   
   
    /*1. 跳过3224字节卷头*/
     for(i=0;i<3224;i++)  
       {
           cc=cc+fread(&temp,1,1,segy_in); /*循环3224次,每次读入1个字节,读完卷头*/
           dd=dd+fwrite(&temp,1,1,segy_out);  

       }
   
    /**/
        cc=cc+fread(&temp,1,1,segy_in);
        samp_code = temp;
          dd=dd+fwrite(&temp,1,1,segy_out);
        cc=cc+fread(&temp,1,1,segy_in);
        samp_code = samp_code*16*16+temp;
          dd=dd+write(&temp,1,1,segy_out);   
        if(samp_code!=1) printf("本程序只支持promax输出的32位IBM浮点数,不支持别的编码格式。"); /* 1=4字节IBM浮点数 */
    /*跳到第一道的道头位置*/
   for(i=0;i<374;i++)  
       {
           cc=cc+fread(&temp,1,1,segy_in);
           dd=dd+fwrite(&temp,1,1,segy_out);  
       }
    /*以上读完了卷头,现在指针在第一道道头位置*/
   
   
   while(!feof(segy_in))     /*循环读取,直到文件指针指向文件结尾*/
 
    {   
    /*跳过114 字节的道头,指针指向本道的样点数*/
   for(i=0;i<114;i++)  
       {
           cc=cc+fread(&temp,1,1,segy_in);
           dd=dd+fwrite(&temp,1,1,segy_out);  
       }  
   
   
   cc=cc+fread(&temp,1,1,segy_in);
   samp_num=temp;   
   dd=dd+fwrite(&temp,1,1,segy_out);
   
   cc=cc+fread(&temp,1,1,segy_in);   
   samp_num=samp_num*16*16+temp;  /*********这个数据非常重要**********/
  /* printf("sample_number=%d\n",samp_num);*/
   dd=dd+fwrite(&temp,1,1,segy_out);
  /*再读124个字节,读完本道道头*/
   for(i=0;i<124;i++)
       {
           cc=cc+fread(&temp,1,1,segy_in);
           dd=dd+fwrite(&temp,1,1,segy_out);  
       }  
   
      
/*    下面该读IBM32位浮点数了。*/
    for(i=0;i<samp_num;i++)  /*挨个读取样点值,并存入数组aaa[]中*/
    {
       fread(&a,1,1,segy_in);
       fread(&b,1,1,segy_in);
       fread(&c,1,1,segy_in);
       fread(&d,1,1,segy_in);
        
       fwrite(&a,1,1,segy_out);
       fwrite(&b,1,1,segy_out);
       fwrite(&c,1,1,segy_out);
       fwrite(&d,1,1,segy_out);
      
    }
   
  }

     
     
   
    fclose(segy_in);
    fclose(segy_out);
    return 0;
}


搜索更多相关主题的帖子: 二进制 
2016-01-23 12:33
lyhinsohu
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-3-4
收藏
得分:0 
我现在发现,可能是feof()的问题,应该怎么解决?
2016-01-23 16:28
快速回复:百思不得其解,只是按二进制读取,然后写入新文件中,为什么新文件多除 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021402 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved