下面是小编为大家整理的复合文档格式(三),-,文档头header公开课(全文完整),供大家参考。
1.复合文档头始终位于文件的开头,头 header 大小一定为 512 字节。这意味着第一个扇区(Sector, SecID 为 0)在一个文件中的偏移量始终未 512 2.复合文档头结构的内容:
三.Byte Order
1.包含多个字节的所有数据项可以使用 Little-Endian 或 Big-Endian method1 存储,但是在一般应用中,仅使用 Little-Endian 方式存储。
2.Little-Endian 首先存储最低有效字节,再存储最高有效字节。这适用于所有数据类型,如 16 位整数,32 位整数和 Unicode 字符。
3.如:
[html] view plain copy 1. 32 位整数:13579BDFH
2. Little-Endian:DFH 9BH 57H 13H
3. Big-Endian:
13H 57H 9BH DFH
四. Of Sector File fsets
1.使用复合文档头部的值可以从 SecID 计算文件的偏移量 [html] view plain copy 1. 1.由于每个扇区(sector)大小 size 都一样,在复合文档头部定义,如 ssz=10,则扇区大小 sec_size 为 2 的 ssz 次方,为 1024 字节
2. 2.符合文档头部大小固定,为 512 字节
3. 所以知道 SecID 的扇区的位置为:
4. sec_pos(SecID) = 512 + SecID * sec_size = 512 + SecID * 2 ssz(2 的 ssz 次方)
2.如:
[html] view plain copy 1. 已知每个扇区(sector)大小 ssz=10,SecID=5,则:
2. sec_pos(SecID) = 512 + SecID * 2 ssz = 512 + 5 * 210 = 512 + 5 * 1024 = 5632.五 u
五.符合文档头说明 1.一个复合文档文件的头信息,512 字节如下:
1. 0 - 7 的 8 个字节 1.1 前 8 个直接是复合文档文件的标识符:D0 CF 11 E0 A1 B1 1A E1 1.2 如图:
2. 8 - 23 的 16 个字节 2.1 这 16 个字节表示此文件的唯一标识,不重要,可以全部为 0.
2.2 如图:
3. 24 - 25 的 2 个字节 3.1 这 2 个字节表示此文件格式的修订号,一般为 003EH 3.2 如图:
4. 26 - 27 的 2 个字节 4.1 这 2 个字节表示此文件格式的版本号,一般为 0003H 4.2 如图:
5. 28 - 29 的 2 个字节 5.1 这 2 个字节表示此复合文档文件采用的字节顺序(Byte Order)标识符 FEH FFH 表示 Little-Endian FFH FEH 表示 Big-Endian 5.2 如图:
6. 30 -31 的 2 个字节
6.1 这 2 个字节表示的是 ssz 的大小,此复合文档文件的扇区(sector)的真实大小 sec_size 为 2 的 ssz 次方字节 6.2 ssz 的最小值为 7,表示扇区最小有 128 字节,ssz 最常用值为 9,有 512 字节 6.3 如图:
7. 32 - 33 的 2 个字节 7.1 这 2 个字节表示在 short-stream container stream 中短扇区(short-sector)的 sssz 大小,短扇区的真实大小 short_sec_size 为 2 的 sssz 次方字节 7.2 最大值是 6 中定义的扇区的大小,常用值 sssz 是 6,有 64 字节 7.3 如图:
8. 34 - 43 的 10 个字节 8.1 这 10 个字节没有用,可忽略 8.2 如图:
9. 44 - 47 的 4 个字节 9.1 这 4 个字节表示扇区分配表(sector allocation table
SAT)使用的扇区(sector)数,这些扇区被 SAT 所使用
9.2 如图:
这里 SAT 只使用了一个扇区(sector): 00H 00H 00H 01H 10. 48 - 51 的 4 个字节 10.1 这 4 个字节表示目录流( directory stream)中第一个扇区(sector)的 SecID,目录 directory 存储了流的入口 10.2 如图:
这里目录流从第 10 个扇区开始:00H 00H 00H 0AH
11. 52 - 55 的 4 个字节 11.1 这 4 个字节没有用,可忽略 11.2 如图:
12. 56 - 59 的 4 个字节 12.1
这 4 个字节表示标准流(standard streams )的最小大小(一般为 4096 bytes), 小于此值的流即为短流
12.2 如图:
这里标准流的大小为 00001000 H = 4096 字节
13. 60 - 63 的 4 个字节
13.1 这 4 个字节表示短扇区分配表(short-sector allocation table SSAT)的第一个扇区(sector)的 SecID 13.2 如果不存在,则为-2.(详情看上一篇:http://blog.csdn.net/lipinganq/article/details/76713880)
13.3 如图:
这里 SSAT 从第 2 个扇区开始
14. 64 - 67 的 4 个字节
14.1 这 4 个字节表示短扇区分配表(Short-Sector Allocation Table
SSAT)的扇区(sector)总数
14.2 如图:
这里 SSAT 使用了一个扇区(sector)
15. 68 - 71 的 4 个字节
15.1 这 4 个字节表示主扇区分配表(Master Sector Allocation Table
MSAT)的第一个扇区(sector)的 SecID 15.2 如果为-2 表示此复合文档文件中没有扩展 MSAT,没有使用附加的扇区(sector)
15.3 如图:
这里的 SecID 为-2
16. 72 - 75 的 4 个字节
16.1 这 4 个字节表示主扇区分配表(master sector allocation table
MSAT)的扇区 (sector)总数 16.2 如图:
上一个 SecID 为-2,所以这里 MSAT 的扇区总数为 0
17. 76 - 511 的 436 个字节
17.1 这 436 个字节表示主扇区分配表( master sector allocation table MSAT)的一部分,包含 MSAT 的前 109 个 SecID 17.2 如图:
由于上文例子中扇区分配表(SAT)仅使用了一个扇区(sector),所以只有第一个 SecID才有效,所以其他所有剩余的 SecID 都设置为-1,表示为特殊的 Free SecID。
这里 SAT 仅使用的扇区为扇区 0