想在程序中使用zib文件,已经可以解析文件的格式了。数据解压那块出了问题。 qCompress和qUncompress不也是调用的ZLIB的函数吗? 使7-zip看到的信息: 使用16进制编辑器看到的数据: 根据general format of a zip file这部分的数据格式是:
[pre]
overall zipfile format:
[/pre][pre]
[local file header + file data + data_descriptor] . . .
[/pre][pre]
[central directory] end of central directory record
[/pre][pre]
a. local file header:
[/pre][pre]
local file header signature 4 bytes (0x04034b50)
[/pre][pre]
version needed to extract 2 bytes
[/pre][pre]
general purpose bit flag 2 bytes
[/pre][pre]
compression method 2 bytes
[/pre][pre]
last mod file time 2 bytes
[/pre][pre]
last mod file date 2 bytes
[/pre][pre]
crc-32 4 bytes
[/pre][pre]
compressed size 4 bytes
[/pre][pre]
uncompressed size 4 bytes
[/pre][pre]
filename length 2 bytes
[/pre][pre]
extra field length 2 bytes
[/pre][pre]
filename (variable size)
[/pre][pre]
extra field (variable size)
[/pre][pre]
b. file data
[/pre][pre]
c. data descriptor:
[/pre][pre]
crc-32 4 bytes
[/pre][pre]
compressed size 4 bytes
[/pre][pre]
uncompressed size 4 bytes
[/pre]
程序提取到的file data部分
size: 161
5d 8d cd a c2 30 10 84 cf 6 f2 e 4b bc a4 45 2b 9e d5 82 f8 73 af de 14
f 21 2e ed 42 4d 43 9a aa 28 be bb 49 45 f ee 61 99 19 3e 66 86 64 74 dd
9d 11 e6 85 5f 35 e 27 45 fc 4b 6b 6b d2 ca 53 63 72 ce 7e 8c 68 1f 64 b3
4a 70 c6 19 19 f 17 45 46 46 a1 5c a9 47 a0 2b e5 20 d fa 7a 3c 25 9c 3d
39 83 70 ff 85 a0 e4 7 8f 60 32 e3 6c b0 3f 90 4d a1 85 5 18 bc 41 74 b2
cf db 71 de 58 34 5b aa 51 8a 69 16 b6 c5 37 2f d1 6f d6 bb 1e fb ac 38 f4
9d b dd 19 de 51 f7 f9 8b b3 37 "
根据qUncompress的要求: Note: If you want to use this function to uncompress external data compressed using zlib, you first need to prepend four bytes to the byte array that contain the expected length of the uncompressed data encoded in big-endian order (most significant byte first).
增加大小信息后的数据 size: 165
0 0 0 dd 5d 8d cd a c2 30 10 84 cf 6 f2 e 4b bc a4 45 2b 9e d5 82 f8
73 af de 14 f 21 2e ed 42 4d 43 9a aa 28 be bb 49 45 f ee 61 99 19 3e 66
86 64 74 dd 9d 11 e6 85 5f 35 e 27 45 fc 4b 6b 6b d2 ca 53 63 72 ce 7e 8c
68 1f 64 b3 4a 70 c6 19 19 f 17 45 46 46 a1 5c a9 47 a0 2b e5 20 d fa 7a
3c 25 9c 3d 39 83 70 ff 85 a0 e4 7 8f 60 32 e3 6c b0 3f 90 4d a1 85 5 18
bc 41 74 b2 cf db 71 de 58 34 5b aa 51 8a 69 16 b6 c5 37 2f d1 6f d6 bb 1e
fb ac 38 f4 9d b dd 19 de 51 f7 f9 8b b3 37 "
调用函数 出现错误:
qUncompress: Z_DATA_ERROR: Input data is corrupted
这个是用WINRAR解压后文件zipTest/main.cpp:
QFile ff("。。。。");
QByteArray bb = QByteArray(ff.readAll());
bb中数据: size: 221 23 69 6e 63 6c 75 64 65 20 3c 51 74 43 6f 72 65 2f 51 43 6f 72 65 41 70 70
6c 69 63 61 74 69 6f 6e 3e 0d a 23 69 6e 63 6c 75 64 65 20 22 73 7a 69 70
2e 68 22 d a d a 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c
20 63 68 61 72 20 2a 61 72 67 76 5b 5d 29 d a 7b d a 20 20 20 20 51 43
6f 72 65 41 70 70 6c 69 63 61 74 69 6f 6e 20 61 28 61 72 67 63 2c 20 61 72
67 76 29 3b d a 9 53 5a 69 70 2a 20 73 20 3d 20 6e 65 77 20 53 5a 69 70
28 29 3b d a 9 73 2d 3e 6f 70 65 6e 46 69 6c 65 28 22 31 2e 7a 69 70 22
29 3b d a 9 73 2d 3e 67 65 74 45 44 52 28 29 3b d a d a 20 20 20 20
72 65 74 75 72 6e 20 61 2e 65 78 65 63 28 29 3b d a 7d d a
qCompress(bb)后
size: 172
0 0 0 dd 78 9c 5d 8d cd a c2 30 10 84 cf 6 f2 e 4b 7a 69 8b 56 3c ab
5 f1 e7 5e bd 29 1e 42 5c da 85 9a 86 34 55 51 7c 77 93 96 5e dc c3 32 33
7c cc 44 a4 55 dd dd 10 56 85 db 36 16 e7 45 f8 1b 63 6a 52 d2 51 a3 73 ce
a2 91 11 ed 9b 4c 56 9 ce 38 23 ed e0 2e 49 c7 41 48 5b aa 29 a8 4a 5a 48
bd 7e 5c ae 9 67 1f ce c0 df 7f 21 c8 78 c0 3 98 2c 39 9b 9c ce 64 52 68
61 d 1a 9f 10 5c dc e7 ed 2c 6f c ea 3 d5 18 8b 45 e6 b7 c5 98 97 e8 f6
bb 63 8f d 2b 16 5d 67 7d 77 86 2f 54 7d fe e5 ec 7 12 7 41 27