搜索
查看: 1664|回复: 7
打印 上一主题 下一主题

求助:C语言文件进制转化保存

[复制链接]
楼主
发表于 2013-6-25 01:24:04 | 显示全部楼层
这是用来做什么的?读取一个文本文件,存在一个数组里,然后再输出?
沙发
发表于 2013-6-25 02:22:03 | 显示全部楼层
本帖最后由 rosynirvana 于 2013-6-25 03:09 编辑

我能看出来的问题有
  1. for(p=*arr;p<*(arr+1012);p++)
复制代码
我大概知道你想用压扁数组的方法来输出,但是这里用错了
arr的类型是char *[46],换句话说+1就移动整整一行,+1012已经就大大越界了
正确的写法是
  1. for(p=*arr;p<&arr[21][46];p++)
复制代码
另外一般建议用下标访问一个数组,用Hanson的话来说就是,无论熟不熟悉C,下标的可读性永远比数组高。

后面的转化算法我没看明白,看到了一处
  1. if(c=='A'&&c=='D')
复制代码
估计是写错了

其实如果你只是要实现读取例子中那样排布的十六进制数,转化成十进制再输出,是个很简单的过程
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main()
  4. {
  5.     FILE *f;
  6.     int i;
  7.     char * filename = "d:/pet.txt";
  8.     if((f=fopen(filename,"r"))==NULL){
  9.         printf("can not open the file \n");
  10.         exit(0);
  11.     }

  12.     while(fscanf(f, "%x", &i) == 1)
  13.         printf("%d ", i);
  14.     return 0;
  15. }
复制代码
板凳
发表于 2013-6-26 00:13:09 | 显示全部楼层
樱花自在 发表于 2013-6-25 13:48
我的意思是
先判断txt中的换行和空格,如果是,再判断下一个;
由于文件有规律,我采用(第一个字母*1 ...

你改过的代码再贴出来看看?

不过,为什么要一次读一个字符呢?这么有规律的数据,可以写一个简单的函数getdata,一次读取三个字符
但还是要转换成数字,还是太麻烦,有fscanf就用吧……
地板
发表于 2013-6-26 00:23:41 | 显示全部楼层
还有我觉得,能不能把原题贴出来?
我感觉这是把文件中的16进制转化成字符,或者说一个从bin映射到文本的问题……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表