zlib匯入到工程與資料壓縮

2021-08-15 09:02:46 字數 2670 閱讀 3318

一.將zlib匯入到工程中

1.    編譯zlib庫後,會生成乙個zlibdllrelease資料夾(release版本)和乙個zlibdlldebug資料夾(debug版本)。使用zlib庫,共需4個檔案:

①   zlib-1.2.8的根目錄下的zconf.h和zlib.h

②   zlibdllrelease資料夾下的zlibwapi.dll和zlibwapi.lib

根據需要編譯的工程是debug還是release,選取不同的庫檔案。

通常使用debug版的檔案。

2.    建立乙個新的專案,將1中的4個檔案複製到專案的目錄下,將兩個.h檔案匯入到工程中。

在工程上點右鍵,選屬性,在c/c++→預處理器選項中,右側的頁面第一項為預處理器定義,在其中新增:zlib_winapi

3.    在工程中包含標頭檔案並導入庫:

#include 

"zlib.h"

#pragma comment

(lib

,"zlibwapi.lib")

若要使用zlib本身定義的一些資料結構,比如byte,uint,ulong,voidpf等,還需要包含:

#include

"zconf.h"

即可。二.使用zlib

1.     壓縮

intcompress

(  bytef

*dest

,  ulongf

*destlen

, const

bytef

*source,

ulong

sourcelen);

壓縮函式有4個引數:

①   bytef

*dest:目標緩衝區,用於存放壓縮後的檔案資料。大小已分配好

②   ulongf

*destlen:目標緩衝區大小。其數值即①的緩衝區大小的值。當函式執行成功後,該值會被修改為準確的解壓縮檔案資料塊大小

③   const

bytef

*source:原始檔資料塊,即需要壓縮的資料檔案,這是已知的

④   ulong

sourcelen:原始檔資料塊大小,這是已知的

壓縮函式執行完成後,destlen /sourcelen即壓縮率。

目標緩衝區及其大小是需要在執行函式之前就分配好的。那麼分配多少就成了問題。考慮到這是壓縮函式,故目標緩衝區必然<=原始檔大小。所以將其設為與原始檔大小相同必然是可以的。不過zlib庫提供了乙個參考函式compressbound,該函式會給出乙個大小必然足夠的建議值。詳見2。

compress還有乙個擴充套件函式:

intcompress2

(  bytef

*dest

,  ulongf

*destlen

,constbytef

*source,

ulong

sourcelen, 

intlevel);

該函式相比於compress,多了乙個level引數,該引數用於壓縮的級別,值為0-9,可指定壓縮質量和壓縮速度的關係。壓縮比越大,所耗時間越長。

2.     壓縮包建議大小

ulong

compressbound

(ulong

sourcelen);

該函式用於配合compress函式使用。

傳入原始檔的大小sourcelen,該函式會給出乙個目標緩衝區大小的建議值。該建議值並不一定準確,但其大小必然足夠放下壓縮後的檔案。

3.     解壓縮

intuncompress

(bytef

*dest

, ulongf

*destlen

, const

bytef

*source, 

ulong

sourcelen);

解壓縮函式有4個引數:

①   bytef

*dest:目標緩衝區,用於存放解壓縮後的檔案資料,大小已分配好

②   ulongf

*destlen:目標緩衝區大小。其數值即①的緩衝區大小的值。當函式執行成功後,該值會被修改為準確的解壓縮檔案資料塊大小

③   const

bytef

*source:原始檔資料塊,即需要解壓縮的資料檔案,這是已知的

④   ulong

sourcelen:原始檔資料塊大小,這是已知的

同壓縮函式相同,解壓縮函式同樣需要在函式執行之前對目標緩衝區大小進行分配。但是,對於壓縮函式,有compressbound可以獲取建議目標緩衝區大小。對於解壓縮函式,卻沒有類似函式。這需要使用者額外做一些工作來計算。

4.     返回值

對於compress和uncompress,根據不同的執行結果,會有不同的返回值:

①   執行成功:返回z_ok

②   記憶體不足:返回z_mem_error

③   目標緩衝區大小不足:返回z_buf_error

④   輸入的原始檔資料有誤:返回z_data_error

以上函式為zlib的壓縮與解壓縮的函式及用法。

這裡所謂的壓縮即資料壓縮,而非操作壓縮包。

如果要操作zip格式的壓縮包,需要呼叫zlib-1.2.8\contrib\minizip資料夾下除miniunz.c和minizip.c以外的.h與.c檔案。

Excel資料匯入到Grid

方法一 string strcon provider microsoft.jet.oledb.4.0 data source strsource extended properties excel 8.0 string query select from sheet1 sheet1表示表 oledb...

Excel資料匯入到Access

下面是asp的全部程式,需要做的是建乙個test.mdb資料庫和乙個test.xls的excel 查詢excel準備匯入到access sql select from sheet1 要匯入的excel資料裡面的表的名稱,後面一定要加 set rs conn2.execute sql while no...

Excel資料匯入到oracle

excel資料匯入到oracle 第一步 將要匯入的excel檔案開啟,選擇 另存為 在檔案型別那裡選擇 文字.txt 後確定儲存 第二步 開啟記事本,編寫下列的內容 注釋 1 控制檔案標識 2 剛才由excel檔案轉化過來的檔案的路徑 3 向oracle的資料表t network agent ba...