zlib之基本函数zlibVersion、deflateInit/deflate/deflateEnd、inflateInit/inflate/inflateEnd

来源:互联网 发布:有哪些功夫软件 编辑:程序博客网 时间:2024/06/07 05:34

获取版本函数:zlibVersion

       压缩函数:deflateInit、deflate、deflateEnd

  解压缩函数:inflateInit、inflate、inflateEnd


#include <iostream>#include <string>#include <zlib.h>#include <zconf.h>using namespace std;#define CHUNK 16384int def(FILE *source, FILE *dest, int level){z_stream strm;strm.zalloc = Z_NULL;strm.zfree = Z_NULL;strm.opaque = Z_NULL;deflateInit(&strm, level);int flush;int have;unsigned char in[CHUNK];unsigned char out[CHUNK];do {strm.avail_in = fread(in, 1, CHUNK, source);strm.next_in = in;flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;do {strm.avail_out = CHUNK;strm.next_out = out;deflate(&strm, flush);have = CHUNK - strm.avail_out;fwrite(out, 1, have, dest);} while (0 == strm.avail_out);} while (Z_FINISH != flush);deflateEnd(&strm);return Z_OK;}int inf(FILE *source, FILE *dest){z_stream strm;strm.zalloc = Z_NULL;strm.zfree = Z_NULL;strm.opaque = Z_NULL;inflateInit(&strm);int ret = Z_OK;int have;unsigned char in[CHUNK];unsigned char out[CHUNK];do {strm.avail_in = fread(in, 1, CHUNK, source);strm.next_in = in;if(0 == strm.avail_in)break;do {strm.avail_out = CHUNK;strm.next_out = out;ret = inflate(&strm, Z_NO_FLUSH);have = CHUNK - strm.avail_out;fwrite(out, 1, have, dest);} while (0 == strm.avail_out);} while (Z_STREAM_END != ret);inflateEnd(&strm);return Z_OK;}void main(int argc, char *argv[]){cout<<"zlibVersion:"<<zlibVersion()<<endl;FILE *fp1 = fopen("1.txt","rb+");FILE *fp2 = fopen("2.txt", "rb+");FILE *fp3 = fopen("3.txt", "rb+");if((NULL == fp3) || (NULL == fp3) || (NULL == fp3)){cout<<"fail to open file."<<endl;return;}//压缩def(fp1, fp2, Z_DEFAULT_COMPRESSION);//解压缩,这个2个函数要分别调用。inf(fp2, fp3);}

此代码参数官网示例代码,本代码为了学习,只写了最简单的函数,没有错误处理。

看完整的示例代码,请看官网示例代码:http://www.zlib.net/zlib_how.html

原创粉丝点击