发了不少教程,资料,都是转载别人的,这篇是我自己写的。 # z; o$ N) Y3 \# K: ^
由于时间有限,写得很简明,不懂的欢迎提问。 , T, P3 N8 t: F% f1 n0 ?1 c
" j% ~" U2 F* a% D3 [打包文件一般是如下格式 , h5 V) W% ^5 f6 Y$ ]5 y( ^+ K
) j- U0 o; u- [0 b( b+ `
文件头
+ p# Y" R% x- A' R2 s文件名表
4 ]8 l: v4 ]5 N2 Z数据块
2 f$ [ B' ^& g$ D M, K3 U5 m: O% G
文件名表一般是如下形式
6 u' y! @+ |8 d3 @* K- |% ]3 d+ l4 N3 ~8 l* w5 u: E" V) k2 h4 c* }
Filename1+相关的2进制信息
+ X+ p5 }* g" Z8 oFilename2+相关的2进制信息 * [# x5 N8 H6 B( l/ a( b, }/ R
Filename3+相关的2进制信息 % W' J& @) K- ?7 g5 s1 u
。。。 * r. z9 w. q& {9 Z; ~4 x
7 A' d: |( i+ z3 P6 R1 t相关的2进制信息里一般会有文件偏移量和文件字节数。但是如何知道相关的2进制信息中哪些是文件偏移量和文件字节数呢?其实很简单。 / U- g4 A7 y1 _0 {. e
) m' l% ?9 A3 O' g
文件偏移量 & v, c/ a. z' v8 l; W
每个文件名表项的长度是一样的,那么最后一个文件名表项结束以后是什么呢。3 T s. H9 [# G5 Z2 c# s
对了,是第一个文件。在2进制编辑器里看一下这个偏移量,比如0002F4D2 ,
& J( ~% A" M1 F$ N8 f) x. t1 N在第一个文件名表项中寻找D2F40200,就能找到文件偏移量的保存位置。
& x! }! G* m9 U% d( s) `注意,偏移量的保存顺序是高低位颠倒的。
! y3 T9 @" G* ~$ d9 m( |7 m8 R, [) Y) b2 L
文件字节数 k6 n3 S6 O9 t" _9 s
找到了文件偏移量的保存位置后,把第1个和第2个文件偏移量相减,得出第一个文件的字节数。3 f9 [0 r1 \/ D. C9 Y
在第1个文件名表项中寻找这个字节数的2进制值,注意,保存顺序也是高低位颠倒的。也就找到了文件字节数的保存位置。4 c/ k# s% p/ v( z- Q" L
! X( w- _# N" I0 b知道了每个文件的文件偏移量,文件字节数,制作打包器,解包器自然就很容易了。 |