在我们目前使用的掌上电脑中,Palm操作系统由于其功能强大、应用软件多等特点,占有很大的比例。PDB文件是Palm OS操作系统上数据文件类型。一般我们在使用Palm系统的电子书时都会遇到这种文件,一般用于电子书或手机电子书
pdb是Palm DataBase的缩写,Palm OS所用文件的扩展名为.pdb。
PDB文件阅读器可以使用PalmReader打开。 如果想把PDB文件转换成TXT文件查看,可以使用WavePDB转。
一. 设计思路
PC端的PDB文件查看软件不多,PDBingo1.504是英文界面,中文内容也显示不出,这样就很不方便。并且一些电子图书也只能在模拟器上看,如果碰到不同内码的汉字更是麻烦,鉴于此,我利用工作之余写了这个免费程序,方便各位朋友查看PDB文件结果和查看电子图书,希望我的劳动能给各位带来方便。
二. 功能介绍
1. 查看PDB文件头信息,可以修改名称,模拟器不支持中文PDB名称文件使用此功能修改比较方便;
2. 查看所有记录,并显示各个记录的偏移地址、长度、属性、标识等信息;
3. 记录可以分文本方式、十六进制单记录以及浏览全部方式查看,并可以快速定位;
4. 可以浏览标准的电子书文件(包括压缩格式);
5. 可以转换BIG5的电子书为GB格式;
6. 可以转换GB的电子书为BIG5格式;
7. 可以设置、保存看书的前后景颜色和字体;
8. 可以保存PDB文件内容到文本文件;
三. 软件特点
1. 完全免费;
2. 完全支持中文;
3. 软件支持文件拖拽,拖住PDB文件往里扔即可显示该文件信息;
四. 程序下载:
参考资料:http://www.palm119.net/down/LookPDB.zip
文件的结构下面着重分析该文件的结构,及其在PC机上生成的方法。
1. PDB文件组成PDB文件物理结构如下图所示:
PDB文件的逻辑结构如下图所示:
PDB文件的结构是由下面几个部分组成的:
数据库头部(Database Header)
记录入口列表(List of Record Entries)
应用信息块(AppInfo Block)(可选)
排序信息块(SortInfo Block)(可选)
数据库记录信息(Sequence of raw record data)
其中在数据库头部结构中,确定了应用信息块(AppInfo Block)和排序信息块(SortInfo Block)的位置信息。记录入口列表中确定了所有记录的位置相关的信息。
其中数据库头部的长度是固定的。应用信息块和排序信息块可有可无,而且尺寸也不确定,在很多结构简单的PDB文件中,没有该部分信息,本文中将不再详细阐述。记录入口列表的长度也随着纪录数量的变化发生变化。
2. PDB文件文件头文件头数据结构
typedef struct {
UInt8 name[dmDBNameLength];
UInt16 attributes;
UInt16 version;
UInt32 creationDate;
UInt32 modificationDate;
UInt32 lastBackupDate;
UInt32 modificationNumber;
LocalID appInfoID;
LocalID sortInfoID;
UInt32 type;
UInt32 creator;
UInt32 uniqueIDSeed;
RecordListType recordList;
} DatabaseHdrType;
文件头字段描述:
Name 一个32字节的长度的字符串,包含有数据库的名称。名称最长为31个字节,使用0x00结尾。该字段也用来在同步备份时作为PDB文件的文件名。 Attributes 数据库的属性标志。 Version 数据库的版本。 creationDate 数据库创建日期, 为距离1904年1月1日上午12:00的秒数。 ModificationDate 最后修改日期,为距离1904年1月1日上午12:00的秒数。 LastBackupDate 最后备份日期,为距离1904年1月1日上午12:00的秒数。 ModificationNumber 数据库修改次数。 AppInfoID AppInfo块的偏移地址,如果没有AppInfo块数值为0x00000000 SortInfoID SortInfo块的偏移地址,如果没有SortInfo块数值为0x00000000 Type 数据库类型标识。该值依赖创建该数据库的应用程序。 Creator 数据库创建者的标识. uniqueIDSeed 被Palm OS系统内部使用,用于在系统装入数据库时记录标识。 RecordList 数据库中资源或者记录的列表。
typedef struct {
LocalID nextRecordListID;
UInt16 numRecords;
UInt16 firstEntry;
} RecordListType;
注意:placeholder byes-这两个字节专门用于字节对齐,如果没有任何记录,那么就在该位置放置0;否则在所有记录列表的最后放置0。
字段描述
NextRecordListID 下一个记录列表的偏移位置,如果没有下一个记录列表该项为0。 NumRecords 记录数量。 FirstEntry 首条记录的索引。
3. PDB文件记录入口PDB文件的记录入口结构:
typedef struct {
LocalID localChunkID;
UInt8 attributes;
UInt8 uniqueID[3];
} RecordEntryType;
字段描述:
LocalChunkID 从文件头计算的该条记录得偏移地址。你能够通过将一条记录的偏移地址和下条记录的偏移地址相减获得记录的长度,如是最后记录可计算到文件结束。 Attributes 记录的属性。 UniqueID 记录的顺序号。
4. AppInfo和SortInfo结构
AppInfo块:
AppInfo块的数据结构如下:
typedef struct {
UInt16 renamedCategories;
Char categoryLabels[16][16];
UInt8 categoryUniqIDs[16];
UInt8 lastUniqID;
UInt8 padding;
} AppInfoType;
字段含义:
RenamedCategories 指出哪个分类名称被使用了