我不熟悉delphi,目前有個需求要將delphi壓縮后的資料用c++解壓
已知: delphi 用的zlib進行壓縮和解壓縮,可能的代碼如下:
uses ZLib;
const
lclNone:Integer=0;
lclFastest:Integer=1;
lclDefault:Integer=2;
lclMax:Integer=3;
procedure DeCompress; //解壓縮程序
var
S:TMemoryStream;
TS:TMemoryStream;
FS:TFileStream;
ZStream:TDecompressionStream;
CompressLevel:Integer;
DataSize:Integer;
begin
FS:=TFileStream.Create('c:\sample.cbl',fmOpenRead);
S:=TMemoryStream.Create;
FS.Position:=12;
FS.Read(CompressLevel,4);
FS.Read(DataSize,4);
if c=lclNone then
S.CopyFrom(FS,FS.Size-20)
else
begin
TS:=TMemoryStream.Create;
TS.CopyFrom(FS,FS.Size-20);
TS.Position:=0;
ZStream:=TDecompressionStream.Create(TS);
S.CopyFrom(ZStream,DataSize);
ZStream.Free;
TS.Free
end;
FS.Free
end;
壓縮的處理方法(假設變數s中存盤的為需要壓縮的資料):
OutStream:=TMemoryStream.Create;
FFileStream.Position:=0;
try
ZStream := TCompressionStream.Create(clMax, OutStream);
try
ZStream.CopyFrom(s, 0);
finally
ZStream.Free;
end;
finally
end;
OutStream.Position:=0;
FFS.CopyFrom(OutStream,OutStream.Size);
OutStream.Free
現在需要用c/c++程式將壓縮后的資料進行解壓縮,下載了最新的zlib 1.2.8 總是解壓失敗,回傳buffer_error
c++寫的呼叫 zlib的解壓縮程式應該沒什么問題, *dst 開的緩沖區也夠大
請高人指點下要如何解決
uj5u.com熱心網友回復:
應該是解壓、壓縮代碼不兼容。建議使用Delphi,撰寫一個解壓Dll,我供C++呼叫。
或C++撰寫一個壓縮Dll,供Delphi呼叫。
uj5u.com熱心網友回復:
如果排除代碼問題,那就有可能是兩個ZLIB庫不一樣,屬于壓縮,解壓導致格式不對,建議采用1樓的方法,或者封裝zlib成DLL 這樣就能保證兩邊的壓縮和解壓格式檔案一樣轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97425.html
標籤:語言基礎/算法/系統設計
上一篇:新手課設救急!!!!!
下一篇:Dubbo系列之服務暴露程序
