用C实现解压缩ZIP文件到内存

ZIP文件格式是非常常用的一种压缩格式,比如M$新的EXCEL文件格式其实就是一个ZIP压缩文件,压缩文件内部是几个带路径的XML文件。如果我们想解析EXCEL文件的内容就要把压缩文件内的XML文件先解压出来,然后再解析XML文件内的内容。如果我们把EXCEL文件中的内容直接就会非常方便地进行内容解析。


解压缩ZIP文件格式在WINDOWS下还没有找到相应的API调用,如果使用第三方的库(zlib, libarchive)则要下载源代码进行安装,而且第三方的库文件都是针对各种压缩格式的,其内容非常繁杂,使用起来也很不方便。能不能自己来实现ZIP格式的解压缩,以方便程序的编译和移植呢?


答案是显然的。其实ZIP格式和GZIP格式虽然文件头不一样,但压缩数据的格式却是相同的,而GZIP的源代码相对要简单一些,我们弄清了GZIP和ZIP格式的区别后,就很容易把GZIP源代码中解压缩部分提取出来,使用到ZIP文件的解压缩上来。笔者已经把实现的源代码上传到了GITHUB上了,具体实现比较简单,源代码用C语言实现只有几百行,在这里就不再一一赘述了。

https://github.com/vonzorich/unziptomemory

需要说明的是为了代码简练,笔者只保留了dynamic部分的解压缩,而把store和fixed两种压缩格式的压缩函数拿掉了,CRC校验部分的代码也拿掉了,需要的同学请根据GZIP的源代码自行加上。

示例程序是在LINUX下编译测试通过的,如果是在WINDOWS下编译请更换头文件并自行实现memmem函数。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值