• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Nothing ever could

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

复合文档格式(笔记中)

Office文档基于复合文档格式

复合文档的组成

Header, Fat, Directory, Minifat, DIF, and Storage

一、Header 固定为512个字节,具体如下表:

image

二、FAT 记录每个sector的用处

       sector类型有:free sectors (FREESECT = 0xFFFFFFFF), Fat Sectors (FATSECT = 0xFFFFFFFD)  DIF Sectors (DIFSECT = 0xFFFFFFC)以及用于存储数据的sector

   除Header以外每个sector对应FAT中一个四字节记录(通过SECT计算),从0x200开始的sector的SECT记为0,对应于FAT中第一个四字节组,如果这个四字节组中存储0xFFFFFFFF,表明该sector空闲,如果为0xFFFFFFFD,表明被FAT占用,如果为0xFFFFFFC表明被DIF占用,如果存储的是除此之外的正值则表明数据流接下来存储在该存储值对应的sector上,直到遇到0xFFFFFFFE表明该数据流结束。注意实际存储一般为Little-Endian。

clip_image002

 

三、DIF(Double-Indirect Fat)

DIF:DIF分为两部分,DIF第一部分存储在Header中从04CH开始的位置,记录了109个FAT“扇区”的SECT,当Excel文件大小超过7M时,才需要DIF第二部分,第二部分以链的形式存储在sector中,并且链的第一个sector的SECT记录在Header的_sectDifStart中,每个DIF占用sector的最后四个字节存储下一个DIF sector的SECT,最后一个DIF sector的最后四个字节为"fe ff ff ff",这四个字节前的4字节组以"ff ff ff ff"填充。下例_sectDifStart=0x0000569a addr=0x569a*0x200+0x200=0x00ad3600(SECT从0开始计数,0号SECT的起始地址为0x200,SECT为sect的实际地址计算为sector的大小×sect+512)

image

image

四、Directory记录复合文档内数据流的组织,类似文件系统,数据结构如下表

image

posted on 2009-02-24 15:37  pocobo  阅读(1511)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3