delphi TDecompressionStream 压缩数据无法用c++ zlib解压

Kaile 2014-10-30 05:06:47
我不熟悉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 开的缓冲区也够大

请高人指点下要如何解决
...全文
380 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果排除代码问题,那就有可能是两个ZLIB库不一样,属于压缩,解压导致格式不对,建议采用1楼的方法,或者封装zlib成DLL 这样就能保证两边的压缩和解压格式文件一样
lyhoo163 2014-10-30
  • 打赏
  • 举报
回复
应该是解压、压缩代码不兼容。 建议使用Delphi,编写一个解压Dll,我供C++调用。 或C++编写一个压缩Dll,供Delphi调用。

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧