【Linux】linux下zlib压缩与crc32校验

本文介绍了在Linux系统中使用zlib库进行数据压缩和解压,以及结合crc32进行数据校验的实践。在压缩过程中,数据首先被压缩,然后生成的crc校验码会被追加到压缩数据的末尾。解压时,会先对包含原始数据和crc校验码的完整数据进行解压,然后校验crc。文章提到了在实现过程中遇到的两个问题:一是crc校验码的生成和验证,二是解压方法的选择,最终通过调整解决了问题。
摘要由CSDN通过智能技术生成

最近项目里为了减少传输数据量,需要进行数据的压缩和解压。网上搜索和之前项目中看到是使用到了zlib一个比较小巧的库,具体的地址请查看官网。如果仅仅是数据的解压缩,那直接跟从官网的教程就好。该地址简单的给出了压缩和解压的实现。但是想做我们的项目是有一些历史的原因还引用了crc32的校验,所以在解压和压缩之前都需要对数据进行crc生成和校验。经过了的一段时间摸索,最终流程也终于走通了。

crc32

crc32介绍

crc32校验

对于crc校验,一般有两种方式。

  • 单独对crc校验码进行校验。在这种方式中,原始数据和crc校验码是分开存储,分开进行校验的;
  • 对原始数据crc校验码一起进行校验,进行校验的时候是不知道哪一部分是数据,哪一部分是crc校验码的。采用这种方法比较方便在使用起来,下面代码示例也是采用的这一种方式。

zlib

压缩算法介绍

常用的压缩算法基本上是两种,这个在zlib库里也有介绍。
- huffman编码,它主要是采用变长的字符进行压缩编码。出现的概率越高,其编码越短,最终编码长度相应的就越短。
- lz777,这个大家自行搜索吧,主要是通过一个距离标识来说明下一个字符的位置。

zlib与crc32使用

该测试代码主要是包括压缩、解压两个函数。在测试代码中对压缩的数据生成crc校验码,并把校验码追加到压缩数据的末尾,成为最终的压缩的数据。解压函数就对最终的压缩数据(原始压缩数据与crc校验码)进行解压操作。

解压函数

int DeCompress(const unsigned char * src, long src_len, unsigned char * dest, long * dest_len)
{
    z_stream stream;
    int err;
    if (crc32(0, src, src_len)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值