1. 程式人生 > >Zlib庫-1.2.11 的函式說明

Zlib庫-1.2.11 的函式說明

zlib庫函式的使用

1、int compress(Bytef *dest, uLongf *destLen, const Bytef* source, uLong sourceLen);

compress函式將source緩衝區的內容壓縮到dest壓縮區。sourceLen表示source緩衝區的大小(以位元組計)。

destLen是傳址呼叫,當呼叫函式的時候,destLen表示dest緩衝區的大小 destLen>(sourceLen + 12)*100.1%

或者使用compressBound(sourceLen),當函式退出,destLen表示壓縮後緩衝區的實際大小

compress 若成功,返回Z_OK,若沒有足夠記憶體,返回Z_MEM_ERROR,若緩衝區不夠大,則返回Z_BUF_ERROR

2、int uncompress(Bytef *dest ,uLongf *destLen, const Bytef*source, uLong sourceLen);

uncompress函式將source緩衝區的內容解壓縮到dest緩衝區。sourceLen是source緩衝區的大小,destLen是傳址呼叫,dest緩衝區必須足以容下解壓後的資料,函式退出後,destLen是解壓後的資料的實際大小

uncompress若成功,則返回Z_OK,若沒有足夠記憶體,則返回Z_MEM_ERROR,若輸出緩衝區不夠,則Z_BUF_ERROR,若輸入資料有誤,則返回Z_DATA_ERROR

#include "zconf.h"
#include "zlib.h"
#include <iostream>
using namespace std;
 
#pragma comment(lib,"zdll.lib")
 
int main()
{
	int err;
	Byte compr[200],uncompr[200];
	uLong comprLen,uncomprLen;
	const char* hello = "1213135454646544665456465465457877874655312333131";
 
	uLong len = strlen(hello)+1;
	comprLen = sizeof(compr)/sizeof(compr[0]);
 
	err = compress(compr,&comprLen,(const Bytef*)hello,len);
 
	if(err != Z_OK){
		cerr<<"compress error: "<<err<<endl;
		exit(1);
	}
	cout<<"original size: "<<len<<" ,compressed size: "<<comprLen<<endl;
	strcpy((char*)uncompr,"garbage");
 
	err = uncompress(uncompr,&uncomprLen,compr,comprLen);
	if(err != Z_OK){
		cerr<<"uncompress error: "<<err<<endl;
		exit(1);
	}else
	{
		cout<<"uncompress() succeed: "<<endl;
		cout<<(char*)uncompr<<endl;
	}
	return 0;
}

結果:


 

文章標籤: zlib解壓縮