Zlib是一个很好的压缩解压缩库,今天我们分别介绍如何在Linux与Windows上安装与使用:
一:Linux平台
首先看看自己的机器上是不是已经安装好zlib了:
whereis zlib
如果安装好了,会输出zlib的路径,这样直接跳过前2步。
1.
下载zlib的最新版,我的是1.2.3
2.
解压,编译:
./configure
make
sudo make install
3.
zlib安装好了,下面我们写一个程序测试一下:
Makefile:
all: test.c gcc -Wall -o test test.c -lz clean: rm -rf *.o test注意到,我们用-lz加入了zlib库
test.c
#include <stdio.h> #include <zlib.h> int main() { /* 原始数据 */ unsigned char strSrc[] = "hello world! aaaaa bbbbb ccccc ddddd 中文测试 yes"; unsigned char buf[1024] = {0}; unsigned char strDst[1024] = {0}; unsigned long srcLen = sizeof(strSrc); unsigned long bufLen = sizeof(buf); unsigned long dstLen = sizeof(strDst); printf("Src string:%s\nLength:%ld\n", strSrc, srcLen); /* 压缩 */ compress(buf, &bufLen, strSrc, srcLen); printf("After Compressed Length:%ld\n", bufLen); /* 解压缩 */ uncompress(strDst, &dstLen, buf, bufLen); printf("After UnCompressed Length:%ld\n",dstLen); printf("UnCompressed String:%s\n",strDst); return 0; }4.
运行结果如下所示:
呵呵,只压缩掉了一个字节。
我们用到了两个函数:compress和uncompress:
压缩:
int compress(unsigned char * dest, unsigned long * destLen, unsigned char * source, unsigned long sourceLen);
dest:压缩后数据保存的目标缓冲区
destLen:目标缓冲区的大小(必须在调用前设置,并且它是一个指针)
source:要压缩的数据
sourceLen:要压缩的数据长度
compress()函数成功返回Z_OK,如果内存不够,返回Z_MEM_ERROR,如果目标缓冲区太小,返回Z_BUF_ERROR
解压缩:
int uncompress(unsigned char * dest, unsigned long * destLen, unsigned char * source, unsigned long sourceLen);
dest:解压后数据保存的目标缓冲区
destLen:目标缓冲区的大小(必须在调用前设置,并且它是一个指针)
source:要解压的数据
sourceLen:要解压的数据长度
uncompress()函数成功返回Z_OK,如果内存不够,返回Z_MEM_ERROR,如果目标缓冲区太小,返回Z_BUF_ERROR,如果要解压的数据损坏或不完整,返回Z_DATA_ERROR。