问几个LZO程序库的问题!

时间:2022-11-22 23:18:51
从网上拿到一个据说是用LZO库压缩过的文件,假设名为abc.src,现在想把它解压成未压缩的文件。因为本人是新手,从网上下载了lzo源代码后,经过一番折腾后终于编出一个demo解压程序并成功编译,但执行时总是失败。注明:我编的这个DEMO程序是只用lzo1x_decompress_safe函数的,用于将一个文件的内容用这个函数处理过后,转存到另一个文件。

如果用lzo1x_decompress,则程序执行时,系统弹出错误对话框。如果是用lzo1x_decompress_safe的话,则该函数返回值总是-5,根据lzo文档的说明,也就是说“数据被破坏,或目标buffer的长度太短”。可是,我的lzo1x_decompress_safe函数的源buffer我就设了1K,而目标buffer的长度我设成256K,这样还嫌短啊!

后来实在扛不住了,打开LZO相关的源代码先看了一下,终于发现两个问题,现在想请教一下各位:

1. 我在试验我编写出来的函数的时候,是随便拿了个文件来解压缩的,结果出错,函数返回值为-5。我在想,我的源buffer和目标buffer的长度差距那么大,不太可能是目标buffer长度不够的问题,那就是数据被破坏,问题是它怎么晓得我的数据是被破坏的。所以想问下,象lzo1x_decompress这类解压缩函数,它所处理的数据,是不是不能为任意的数据的,是不是必须得是先前由lzo1x_compress函数处理过的压缩数据才行啊!这一点好象LZO的文档没有说明,我以为是可以处理任意数据的,现在出错,我怀疑是不是这方面出的问题。

2. 结果用那个函数来处理abc.src这类被压缩的函数,照样出错。这个问题的答案我在源代码里找到了线索。在lzo-2.03\src\lzo1.c这个文件中,我看到文件头有两处变量,是可以自定义的。分别是RBITS(3-5)和CLEVEL(1-9),这两个数据是用宏定义的,有注释说是可以自行更改以便于自定义,而对同一数据的压缩函数和解压函数必须使用相同的变量才行。我怀疑我的程序出错可能就在这两个变量上,那个abc.src在压缩的时候所采用的RBITS和CLEVEL和我的可能不一样。

原因我都自己想出来了,但是目前还没有上机实证,所以我还不确定我想的对不对,我先发上来,希望玩过lzo库的人能否指点一下我的猜测对不对。谢谢!

2 个解决方案

#1


该回复于2009-05-18 10:04:55被版主删除

#2


帮顶!!!

#1


该回复于2009-05-18 10:04:55被版主删除

#2


帮顶!!!