模拟城市中文网

 找回密码
 入住
搜索
查看: 2188|回复: 5

混乱的DBPF,混乱的程序运行结果

[复制链接]
发表于 2011-12-25 10:43 | 显示全部楼层 |阅读模式
一DAT文件内有一RUL文件与一DIR文件,现在对其Header进行读取是完全正常的;但是对于Index表的读取则是问题层出。



如图,现在第一个文件的TGI似乎正常,而在这里,InstanceLo的值却变成了实际的FileLocation,而FileLocation则成了原本FileSize的值,FileSize的值现在变成了一个奇怪的数字。第二个文件,可能是DIR文件的缘故,Type=Group,而Group变成了Instance,InstanceHi与InstanceLo分别变成FileSize与FileLocation,最后两个值与上一文件相同(高度怀疑读完DIR的InstanceLo就EOF了)

部分代码:

//此处代码省略


typedef struct
{
       DWORD Type;
       DWORD Group;
       DWORD InstanceHi;
       DWORD InstanceLo;
       DWORD FileLocation;
       DWORD FileSize;
} DBPF_Index;


//此处代码省略


bool DBPF::open(char *Path)
{
     this->File.open(Path, ios::binary);
     if(!(this->File))
     {
         this->state = false;
         return false;
     }

     this->File.read((char *)&(this->Header), 16*4);   //将Header部分内容直接写入内存,Index同理

     if(this->Header.MayorVerson != 1)
     {
         this->state = false;
         return false;
     }

     this->File.seekg(this->Header.IndexLocation, ios::beg);

     DBPF_Index Temp;

     for(unsigned long i = 0; i < this->Header.IndexEntryCount; ++i)
     {
         this->File.read((char *)&Temp, 6*4);
         this->Index.push_back(Temp);
     }
     this->state = true;
     this->File.close();
     return true;
}

[ 本帖最后由 UFD 于 2011-12-31 18:08 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?入住

x

评分

参与人数 1威望 +2 模拟币 +22 收起 理由
lrdcq + 2 + 22 CPP自重

查看全部评分

发表于 2011-12-25 11:21 | 显示全部楼层
LZ如果有闲心的话

可以参看一下这个东西
http://wiki.simcity.cn/index.php ... e&variant=zh-cn
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-25 12:56 | 显示全部楼层
原帖由 lrdcq 于 2011-12-25 11:21 发表
LZ如果有闲心的话

可以参看一下这个东西
http://wiki.simcity.cn/index.php?title=DBPF/Source_Code&variant=zh-cn



PHP什么的………………才没学多少
回复 支持 反对

使用道具 举报

发表于 2012-6-6 22:06 | 显示全部楼层
我还是想回一下,
在SC4用的DBPF1.0中
貌似并不存在InstanceLo这个东西
这个可以通过每个index长度 = index 大小/ index 数目计算判断出来。。。。

所以,就是多读了。。。。。

不知道LZ还在弄这个没。。。。

[ 本帖最后由 lrdcq 于 2012-6-6 22:08 编辑 ]

评分

参与人数 1威望 +1 模拟币 +100 收起 理由
天唐永thianz + 1 + 100 個人覺得這版區挖墓沒關係說/熱心 ...

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2012-6-6 22:34 | 显示全部楼层
这是坟?= =

正经:
在DBPF1.0里InstanceID是32位的,所以就没有高低位(那样就是64位了)。而且后面的Index表每项长度都是20字节(那个结构体的大小有24字节),多读的那4字节其实是下一个Entry的TypeID
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-29 16:15 | 显示全部楼层
原帖由 lrdcq 于 2012-6-6 22:06 发表
我还是想回一下,
在SC4用的DBPF1.0中
貌似并不存在InstanceLo这个东西
这个可以通过每个index长度 = index 大小/ index 数目计算判断出来。。。。

所以,就是多读了。。。。。

不知道LZ还在弄这个没。。。。 ...


多谢~~~~~~(话说我是多久没上SCCN了 = =)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 入住

本版积分规则

小黑屋|手机版|模拟城市中文网

GMT+8, 2024-5-13 23:29 , Processed in 0.032387 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表