| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 992 人关注过本帖
标题:求助 :如何将文件中的十六进制读取并保存在数组里
只看楼主 加入收藏
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
结帖率:75%
收藏
 问题点数:0 回复次数:5 
求助 :如何将文件中的十六进制读取并保存在数组里
#include<stdio.h>
#include<stdlib.h>
int main()
{
void showFile(char * filename, char *arr, int h, int w);
char arr[22][46];
int i,j;
showFile("D:\\pet.txt",*arr,22,46);
for(i=0;i<22;i++)
for(j=0;j<46;j++)
{
    printf("%c",*(*(arr+i)+j));
}
printf("\n");
return 0;
}
void showFile(char * filename, char *arr, int h, int w)
{
    int i,j;
    FILE *f;
    if((f=fopen(filename,"r"))==NULL)
    {
    printf("can not open the file \n");
    exit(0);
    }
    //这里应该要有判断结束的前提。。。
    fscanf(f,"%x ",(arr+i)+j);//把十六进制转化为十进制保存在数组里,但是要过滤掉空格以及换行

    fclose(f);
    }                          

以上是我写的程序,文件不知道怎么弄上去就粘贴几行,附在下面
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 0A
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 2F 7D 20 20 0D 0A
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 2F 20 7D 20 20 0D 0A
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

题目是利用函数void showFile(char * filename, char *arr, int h, int w)读取txt文件,其中参数fileName的实参应为文件路径名,arr为二维数组首元素的地址,h为高,w为宽,(意思是保存在大小为h*w的二维数组)利用在main函数定义的二维数组存放数据。

我想问一下 如何处理空格和换行呢?就是红色字体部分?还有是不是我的程序存在什么问题、


谢谢各位了
搜索更多相关主题的帖子: 十六进制 include return 如何 file 
2013-06-24 19:59
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
各位帮帮忙啊!!
2013-06-24 21:08
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
int main()
{
void showFile(char * filename, char *arr, int h, int w);
char arr[22][46];
char *p;
showFile("D:\\pet.txt",*arr,22,46);
for(p=*arr;p<*(arr+1012);p++)
{
    printf("%c",*p);
}
printf("\n");
return 0;
}





void showFile(char * filename, char *arr, int h, int w)
{
    int i=1, j=0;
    char c;
    FILE *f;
    if((f=fopen(filename,"r"))==NULL)
    {
    printf("can not open the file \n");
    exit(0);
    }

    while(!feof(f))
    {
        if(c!='\n'|| c!=' ')
        {
            c=fgetc(f);    i++;
        }
        if(i%3==1)
         *(arr+j)=c*16;
          else
        {
              if(c>='A'&&c<='E')
              {
                  if(c=='A'&&c=='D')
                  {*(arr+j)=0;}
                  else
                  {*(arr+j)=*(arr+j)+c-55;j++;}
              }
              else
              {*(arr+j)=*(arr+j)+c;
                  j++;}
         }

    }
    fclose(f);
}     

各位大神能帮我看看毛病在哪吗 不知道为什么运行不了啊 谢谢
2013-06-25 00:06
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
int main()
{
void showFile(char * filename, char *arr, int h, int w);
char arr[22][46];

char *p;
showFile("D:\\pet.txt",*arr,22,46);
for(p=*arr;p<*(arr+1012);p++)
{
    printf("%c",*p);
}
printf("\n");
return 0;
}

void showFile(char * filename, char *arr, int h, int w)
{
    int i=1, j=0;
    char c;
    FILE *f;
    if((f=fopen(filename,"r"))==NULL)
    {
    printf("can not open the file \n");
    exit(0);
    }

    while(!feof(f))   
    {
        c=fgetc(f);
        if(c=='\n'|| c==' ')
        {
            c=fgetc(f);    i++;i++;
        }
        if(i%3==1)
        { *(arr+j)=(c-48)*16;i++;}
         else
        {
              if(c>='A'&&c<='E')
              {
                  if(c=='A'&&c=='D')
                  {*(arr+j)=0;}
                  else
                  {*(arr+j)=*(arr+j)+c-55;j++;}
              }
              else
              {
                  *(arr+j)=*(arr+j)+c-48;
                  j++;
              }
              i++;
         }
    }
    fclose(f);
}     

这是我最新修改的 还是不行啊  各位帮帮忙啊
2013-06-25 00:21
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
各位大神啊,我这道题的意思是读取一个文本文件,存在一个数组里,然后再输出。
程序代码:
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 0D 0A
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 2F 7D 20 20 0D 0A
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20 20 2F 20 7D 20 20 0D 0A
#include<stdio.h>
 #include<stdlib.h>
 int main()
 {
 void showFile(char * filename, char *arr, int h, int w);
 char arr[22][46];

char *p;
 showFile("D:\\pet.txt",*arr,22,46);
 for(p=*arr;p<*(arr+1012);p++)
 {
 printf("%c",*p);
 }
 printf("\n");
 return 0;
 }

void showFile(char * filename, char *arr, int h, int w)
 {
 int i=1, j=0;
 char c;
 FILE *f;
 if((f=fopen(filename,"r"))==NULL)
 {
 printf("can not open the file \n");
 exit(0);
 }

    while(!feof(f))
{
   c=fgetc(f);
   if(c=='\n'|| c==' ')
   {
   c=fgetc(f); i++;i++;
   }
   if(i%3==1)
   { *(arr+j)=(c-48)*16;i++;}
          else
  {
      if(c>='A'&&c<='E')
      {
       if(c=='A'&&c=='D')
       {*(arr+j)=0;}
       else
       {*(arr+j)=*(arr+j)+c-55;j++;}
      }
      else
      {
       *(arr+j)=*(arr+j)+c-48;
       j++;
      }
         i++;
    }
 }
     fclose(f);
 }   
 


先判断txt中的换行和空格,如果是,再判断下一个;
由于文件有规律,我采用(第一个字母*16+第二个字母)转化为十进制;(ps:0-9  是char型,值为c-48;A-D,值为c-55;)
又因为文件中有0A  0D(代表换行和回车),判断第二个字母是不是AD,如果是,然后就对应的arr【i】【j】的值置零。

我不知道为什么不能运行,不知道下面的是不是有错!!!
*(arr+j)=(c-48)*16
 (p=*arr;p<*(arr+1012);p++)

2013-06-25 13:43
樱花自在
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2012-12-29
收藏
得分:0 
大家帮帮忙啊帮帮忙啊
2013-06-25 13:44
快速回复:求助 :如何将文件中的十六进制读取并保存在数组里
数据加载中...
 
   



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

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