首页 > 编程语言 >bzip2 C/C++ 库bzlib.h使用案例:使用实用函数进行压缩/解压缩

bzip2 C/C++ 库bzlib.h使用案例:使用实用函数进行压缩/解压缩

时间:2023-01-10 12:11:29浏览次数:69  
标签:bzip2 bzlib int 压缩 解压缩 buffer printf 原始数据 destLen

bzip2提供了底层接口,高级接口以及两个实用函数(Utility functions),这两个实用函数在无stdio的环境中也可以使用,它们分别是BZ2_bzBuffToBuffCompressBZ2_bzBuffToBuffDecompress
如何引入libbzip2库,可以参考上一篇的准备部分:https://www.cnblogs.com/sq800/p/17030448.html ,这里不再介绍。

使用

这两个函数是从缓冲区到缓冲区的,直接在内存中进行压缩、解压缩操作。
编写一个函数进行测试:

void utility_test() {

}

在其中编写代码。

1.首先定义一个原始数据:

char buffer[] = "hello world!1234567890hello world!1234567890678ty7t32148776416754327854763214354343231";   //原始数据
int len = strlen(buffer);       //原始数据长度

定义一个字符串是为了用于测试,如果有已存在的要压缩的数据,用要压缩的数据即可。

2.然后申请一块内存接收压缩过后的数据

int destLen = len * 1.1 + 600;  //压缩后的数据长度,原始数组长度*1.01+600,可以多给一些,保持内存充足。
char* dest = malloc(destLen);   //接收压缩过的数据

3.压缩数据

    int err;        //错误码
    //压缩
    err = BZ2_bzBuffToBuffCompress(
        dest,       //目标buffer(压缩后的数据)
        &destLen,   //目标buffer长度。函数内部压缩完之后,会设置为实际的长度。
        buffer,     //原始数据
        len,        //原始数据长度
        1,          //blockSize100k 字典大小,范围1-9,实际尺寸是100k*N
        4,          //verbosity 控制台输出压缩信息,范围0-4,数字越小输出越少
        30          //默认值30,库内部排序算法相关
    );

4.输出压缩结果

    //输出压缩结果
    char* p = dest;
    printf("\n----------\n");
    for (int i = 0; i < destLen; i++) {
        printf("%d ", *p++);
    }
    printf("\n----------\n");

5.解压

    //解压
    char deCompress[1000];      //接收解压缩的数据。解压缩需要的内存大小事先是不知道的。
    unsigned int len2 = 1000;
    err = BZ2_bzBuffToBuffDecompress(deCompress, &len2, dest, destLen, 0, 4); //参数与压缩类似

6.验证解压结果

    //输出解压结果
    printf("\n----------\n");
    for (int i = 0; i < len2; i++) {
        printf("%c", deCompress[i]);
    }
    printf("\n----------\n");

完整代码

#include "utility-interface.h"
#include <string.h>

void utility_test() {

    char buffer[] = "hello world!1234567890hello world!1234567890678ty7t32148776416754327854763214354343231";   //原始数据
    int len = strlen(buffer);       //原始数据长度

    int destLen = len * 1.1 + 600;  //压缩后的数据长度,原始数组长度*1.01+600,可以多给一些,保持内存充足。
    char* dest = malloc(destLen);   //接收压缩过的数据
    int err;        //错误码
    //压缩
    err = BZ2_bzBuffToBuffCompress(
        dest,       //目标buffer(压缩后的数据)
        &destLen,   //目标buffer长度。函数内部压缩完之后,会设置为实际的长度。
        buffer,     //原始数据
        len,        //原始数据长度
        1,          //blockSize100k 字典大小,范围1-9,实际尺寸是100k*N
        4,          //verbosity 控制台输出压缩信息,范围0-4,数字越小输出越少
        30          //默认值30,库内部排序算法相关
    );
    //输出压缩结果
    char* p = dest;
    printf("\n----------\n");
    for (int i = 0; i < destLen; i++) {
        printf("%d ", *p++);
    }
    printf("\n----------\n");

    //解压
    char deCompress[1000];      //接收解压缩的数据。解压缩需要的内存大小事先是不知道的。
    unsigned int len2 = 1000;
    err = BZ2_bzBuffToBuffDecompress(deCompress, &len2, dest, destLen, 0, 4); //参数与压缩类似

    //输出解压结果
    printf("\n----------\n");
    for (int i = 0; i < len2; i++) {
        printf("%c", deCompress[i]);
    }
    printf("\n----------\n");
}

测试

把这个函数放在main函数中进行调试验证:
image
可以看到压缩后的数据被完整解压了出来。

标签:bzip2,bzlib,int,压缩,解压缩,buffer,printf,原始数据,destLen
From: https://www.cnblogs.com/sq800/p/17039696.html

相关文章

  • bzip2 C/C++ 库bzlib.h使用案例:读取.bz2文件
    准备从网上下载bzip2库,我下载的是V1.0.8版本的。然后在C工程中添加一个筛选器(文件夹)名叫bzlib,然后把下载的库中的如下9个文件,添加到其中:代码主函数代码如下:#include......
  • php&.net对称压缩解压缩探讨
    C#客户端访问PHPSOAPWebService,当传输大量文本数据时,可以通过压缩减少网络传输。C#在System.IO.Compression命名空间下提供了两个类GZipStream类和DeflateStream类来进行......
  • bzip2 库 bzlib.h 使用方法
    3.4.High-levelinterface此接口提供读取和写入bzip2格式文件的功能。首先,一些通用的要点。所有函数都采用int*型的第一个参数bzerror。每次调用后,应首先查询bzerror以......
  • 压缩和解压缩
    tar(牢记它)压缩-cz(j)f解压缩-xz(j)f-C指定目录bzip2gzip......
  • peaZip 多平台解压缩软件
    peaZip多平台解压缩软件PeaZip是跨平台基于FreePascal的解压缩软件。可以运行在Linux系统和Windows系统。支持鼠标右键操作。peazip本身有一种原生的压缩格式叫做pea。......
  • ubuntu20.04下C++调用接口解压缩zip文件
     https://github.com/Lecrapouille/zipper Compiling/InstallingTodownloadtheprojectandcompileit:gitclonehttps://github.com/lecrapouille/zipper.g......
  • linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
    本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式,以及如何使用它们对.tar、.gz、.tar.gz、.tgz、......
  • Python数据压缩和存档——zlib/gzip/bzip2/lzma/zip/tar
    Python数据压缩和存档——zlib/gzip/bzip2/lzma/zip/tar​前言python中提供了几种重要的数据压缩算法的支持,包括zlib、gzip、bzip2和lzma数据压缩算法,同时支持创建ZIP......
  • zlib 压缩解压缩库函数
    1.下载地址http://www.zlib.net/2.使用方法zpipe里面有个例程,示范了压缩和解压缩的功能 3.  例程讲解主要有2个函数,压缩函数例程 和解压缩函数例程......
  • Linux下的压缩解压缩命令详解
    1.zip-rmyfile.zip./*将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.2.unzipunzip-o-d/home/sunnymyfile.zip......