免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5249 | 回复: 10
打印 上一主题 下一主题

二进制数的读取问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-16 09:47 |只看该作者 |倒序浏览
怎么样把一行一行的二进制数读到数组中呢?(每一行数字的长度不一样.)

请赐教,谢谢

论坛徽章:
0
2 [报告]
发表于 2006-04-16 09:53 |只看该作者
不行,二进制没有行的概念,只是一个字节流。

论坛徽章:
0
3 [报告]
发表于 2006-04-16 09:56 |只看该作者
估计lz说的是用文本的方式将一串二进制数作为一行存放在文件中
然后要读入数组^_^

论坛徽章:
0
4 [报告]
发表于 2006-04-16 10:08 |只看该作者
有2个文件,一个文件中放着字符,另一个文件中放着数字,他们是一一对应的,也就是说每一个数字表示它所对应的字符出现的次数.
字符可以按行读到数组中,想得到那些字符对应的数字,然后进行一些运算(加、减等),运算完了,在处理下一行,直到文件结束。

请指教啊,求算法和思路

论坛徽章:
0
5 [报告]
发表于 2006-04-16 10:19 |只看该作者
你是不是认为另外一个数字的文件就是二进制?
比如你的一个文件:
1C1D。。。。。。
你用od -c 看一下,本来二进制1C是一个字节,如果是文本方式的话则1是一个字节C又是一个字节了。

论坛徽章:
0
6 [报告]
发表于 2006-04-16 10:44 |只看该作者
原帖由 hkwang66 于 2006-4-16 10:19 发表
你是不是认为另外一个数字的文件就是二进制?
比如你的一个文件:
1C1D。。。。。。
你用od -c 看一下,本来二进制1C是一个字节,如果是文本方式的话则1是一个字节C又是一个字节了。


在我开始做统计的时候,就把字符放到一个文本文件中,把该字符出现的次数用fwrite(&count,sizeof(int),1,fp)按二进制的存储方式一一放到一个.dat 的文件中了

因为下一步要对这些数字进行加、减、乘等运算,我只能用二进制的方式存储了,现在就是说:字符已经放到文本文件中了,其对应的次数也放到.dat的文件中,我现在想把他们读出来,字符是读一行,然后与给定的字符串比较,找到相同的那段字符,从而找出的这段字符在.dat文件中对应出现的次数,然后进行一些运算。
现在的问题就是:那段找到的字符,怎么样把他们所对应的次数找出来?
字符是一行一行的读到数组中,然后与给定的字符串比较,从而找到那段相同的字符,可是这些字符出现的次数怎么从.dat文件中读出啊?

请在赐教,感激万分!

论坛徽章:
0
7 [报告]
发表于 2006-04-16 15:30 |只看该作者
没有人帮忙看一下啊?

论坛徽章:
0
8 [报告]
发表于 2006-04-16 18:00 |只看该作者
文本文件读出一行,计算一下长度,读*.dat文件时读 len*sizeof(int)长度(按照字节读取)放到字符类型的缓冲中,然后文本文件读出的每移动一个字节,*dat读出的移动sizeof(int)个字节;
*.dat读出也可以定义一个整数数组然后读入:fread(数组名,len*sizeof(int),len,fp);

论坛徽章:
0
9 [报告]
发表于 2006-04-16 19:02 |只看该作者
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <malloc.h>
#include<math.h>
/*          main()        */
int main(void)
{
   FILE *fp,*fp1,*fp2;
   static  d[]={ABCBACBCBA BBBCAAABBCBA  BC};给定的字符串
   char a[100];
   int b[100];
   int c[100];
   int i,leng1=0,l=0,k=0,leng2=0;  
   for(i=0;i<100;i++)
   {
           a[i]='\0';
           b[i]=0;
           c[i]=0;
   }
   fp2=fopen("aaaaa.txt","w");
   if ((fp=fopen("次数.dat", "rb")) == NULL)
   {
      printf("Can not open the file1!\n");
      exit(1);
   }
   if ((fp1=fopen("字符.txt", "r")) == NULL)
   {
      printf("Can not open the file2!\n");
      exit(1);
   }
  while(!feof(fp)&&!feof(fp1))      
   {
           fgets(a,1000,fp1);
           leng1=strlen(a);
           printf("leng1=%d\n",leng1);
           for(i=0;i<leng1;i++)
           fread(&b[i],sizeof(int),leng1,fp);   
        /*        比较读到a中的字符和给定的字符  */
           {
             ........
            ............ 略去
           }
       /*        比如:找出a数组中第7~23个字符是和给定的字符相同的  */
            for(i=7;i<23;i++)
         {
            c[k]=fabs(b[i]-b[i+1]);
                  k++;
             fprintf(fp2,"%d\t",c[i]);         
        }

    }
  return 0;

}
但是输出的结果有问题:
第一行字符的输出结果:
7        2        1        6        1        2        4        2        2        1        1        328        256        256        1280       
.........................
.........................
.........................

而本应该输出的的结果应该为:
7        2        1        6        1        2        4        2        2        1        1        2        7        1        4       
..........................
..........................
..........................
对于第二行字符也一样,输出的结果前部分是正确的,后部分是错的,请帮忙看下,谢谢

论坛徽章:
0
10 [报告]
发表于 2006-04-17 08:27 |只看该作者
上面的写错了,应该为:
for(i=0;i<leng1;i++)
  fread(&b,sizeof(int),1,fp);   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP