Zlib簡(jiǎn)介
zlib是用于數(shù)據(jù)壓縮的一個(gè)簡(jiǎn)單的庫(kù)敦捧,僅支持一個(gè)LZ77的變種算法。
zlib被設(shè)計(jì)成一個(gè)免費(fèi)的兢卵、通用的绪颖、法律上不受阻礙(即沒(méi)有被任何專利覆蓋) 的無(wú)損數(shù)據(jù)壓縮庫(kù)秽荤。zlib幾乎適用于任何計(jì)算器硬件和操作系統(tǒng)柠横。
下載地址
zlib安裝
進(jìn)入zlib\contrib\vstudio\vc14
打開(kāi)sln文件,使用x64 debug模式進(jìn)行編譯
編譯過(guò)程可能會(huì)踩的坑
zlib調(diào)用
vs工程中選擇
- 項(xiàng)目屬性\C/C++\ 預(yù)處理處加入ZLIB_WINAPI
- 項(xiàng)目屬性\C/C++\ 附加包含目錄 增加.h文件所在目錄
- 項(xiàng)目屬性\鏈接器\常規(guī)\附加庫(kù)目錄 選擇編譯后的.lib文件所在目錄
- 項(xiàng)目屬性\鏈接器\輸入\附加依賴項(xiàng) 輸入zlibwapi.lib
- 將zlibwapi.dll 拷貝至src目錄下
調(diào)用C++庫(kù)常用步驟
- 附加庫(kù)目錄選擇lib所在目錄
- 附加依賴項(xiàng)選擇lib文件
- 將.dll文件加入根目錄
- 使用預(yù)編譯指令與.h文件調(diào)用
zlib常用函數(shù)
int compress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
int compress2 (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level);
int uncompress (Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);
壓縮算法意義
經(jīng)測(cè)試雁乡,在二進(jìn)制文件中隨機(jī)寫(xiě)入ASCII碼時(shí)[0-127],使用Zlib壓縮算法能將數(shù)據(jù)壓縮為0.87倍大小糜俗,而使用7z算法能將數(shù)據(jù)壓縮為0.58倍大小
理論上完全隨機(jī)的數(shù)據(jù)無(wú)法被壓縮,可能是使用rand()%128
降低了數(shù)據(jù)的隨機(jī)性
壓縮后的數(shù)據(jù)在傳輸時(shí)可能出錯(cuò)悠抹,導(dǎo)致無(wú)法恢復(fù)
后續(xù)將改用7z算法,并在傳輸時(shí)測(cè)試出錯(cuò)率楔敌,若出錯(cuò)率較高則不使用壓縮