| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:二进制文件读取问题
只看楼主 加入收藏
heshiyuan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
二进制文件读取问题
用折半查找,找到二进制文件中与关键字相同的项,并在程序中将其输出。问题主要是不知道怎样在二进制文件中实现折半查找。望各位给予解答。
搜索更多相关主题的帖子: 文件 二进制 
2010-03-18 00:24
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:20 
应该知道总项数(n)有多少吧,然后写入的结构(struct arch{int a; char keyword[10];int b;})也应该知道吧,每一项的关键字keyword相对的位置也应该知道吧,然后你就通过fseek来改变文件指针位置(fseek(fp, oft+k*sizeof(struct arch)+4, SEEK_SET),oft 为你开始写结构内容的偏移),把第k项的关键字读出来(fread(buf, 10, 1, fp)),再通过折半查找确定下一个k的值,以此类推。。。
2010-03-18 00:42
heshiyuan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-30
收藏
得分:0 
不知道总项数,知道项数那不就好做了嘛!只不过现在知道了,ftell(fp)可以知道二进制文件的字节数。然后通过fseek()定位,进行折半查找。
2010-03-18 11:21
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
你可以在文件开头处写个头记录总项数和其它的相关信息呀,不过你用ftell获取总大小,再算上一点偏移,用fseek定位也是挺好的选择,只要有规律都好办

2010-03-18 11:51
heshiyuan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-30
收藏
得分:0 
遇到一个问题,就是查找时文件前面将近有50项总是查不到,后面所有项都能查到。不知道什么原因?希望你能帮助我。
2010-03-18 12:24
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
囧。。。你这么问我无从下手呀。。。你查查有没有写错过文件,或者重新用个新的,或者看看你的偏移有没有弄错。。。。
2010-03-18 12:40
heshiyuan
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2009-10-30
收藏
得分:0 
谢谢呀!找到原因了。文件中有一项错了。
2010-03-18 13:37
快速回复:二进制文件读取问题
数据加载中...
 
   



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

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