免费注册 查看新帖 |

Chinaunix

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

[C] 请教,关于用C读二进制文件问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-23 17:28 |只看该作者 |倒序浏览
刚写的代码:int i,ch1,ch2,qu,wei,ret,sd;
                  FILE *fd;
1方法:
       fd = fopen(FILENAME,"rb"); //FILENAME为一二进制文件名
。。。。。
    i=52;
    i=((qu-161)*94+(wei-161))*8+i;
        ret = fseek(fd,i,SEEK_SET);
        ch1 = fgetc(fd);
        ch2 = fgetc(fd);

结果:ret始终为0,ch1,ch2 也始终为0;

2方法:
      sd = open(FILENAME,O_RDONLY);
...

    i=52;
    i=((qu-161)*94+(wei-161))*8+i;
        ret = lseek(sd,i,SEEK_SET);
        read(sd,&ch1,sizeof(ch1));
        read(sd,&ch2,sizeof(ch2));
结果:ret返回值正确,ch1,ch2始终为0;

不知道是否是读二进制文件要有什么特殊要求,否则怎么会总错。需要怎样读啊,求大师帮忙。

论坛徽章:
0
2 [报告]
发表于 2010-08-23 17:38 |只看该作者
你到底想实现什么功能啊?

论坛徽章:
0
3 [报告]
发表于 2010-08-23 17:45 |只看该作者
上面fseek返回0是正确的,我本以为会跟lseek一样返回移动的字节数。
但是我始终不能将对应位置的数据放到我的变量ch1,ch2里,怎样才能做到呢?求解.

论坛徽章:
0
4 [报告]
发表于 2010-08-23 17:46 |只看该作者
回复 2# zhuqing_739


    我就想读二进制文件seek到的位置上的数据,然后存到我的变量ch1,ch2里,但是始终存不进去,怎么办?

论坛徽章:
0
5 [报告]
发表于 2010-08-23 17:52 |只看该作者
要确保你文件偏移的正确性哦,lseek函数是可以定位到文件实际长度之后的这样会产生一个空洞文件。

论坛徽章:
0
6 [报告]
发表于 2010-08-23 17:58 |只看该作者
还有二进制读写一般都是用fread和fwrite,楼主干嘛用fgetc,这是对文本流操作嘛。

论坛徽章:
0
7 [报告]
发表于 2010-08-23 18:08 |只看该作者
回复 5# davelv


    绝对没有seek出文件结尾,放心行了。二进制文件是否有空洞,因为文件不是我自己做的,所以不敢确定。不过这种可能性很少,那个二进制文件是矢量字库坐标文件,有空洞的话不是自找麻烦么。

论坛徽章:
0
8 [报告]
发表于 2010-08-23 18:09 |只看该作者
回复 6# davelv


    因为我最开始用fread不好使,才用fgetc试试,才知道同样不好使,杯具。。。

论坛徽章:
0
9 [报告]
发表于 2010-08-23 18:12 |只看该作者
fgetc读二进制文件?

论坛徽章:
0
10 [报告]
发表于 2010-08-23 18:23 |只看该作者
注意“二进制文件”与“文本文件”的区别!!
6楼的说得很对啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP