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 开的缓冲区也够大

请高人指点下要如何解决
...全文
501 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果排除代码问题,那就有可能是两个ZLIB库不一样,属于压缩,解压导致格式不对,建议采用1楼的方法,或者封装zlib成DLL 这样就能保证两边的压缩和解压格式文件一样
lyhoo163 2014-10-30
  • 打赏
  • 举报
回复
应该是解压、压缩代码不兼容。 建议使用Delphi,编写一个解压Dll,我供C++调用。 或C++编写一个压缩Dll,供Delphi调用。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 ### 中兴F420/F460/F660光猫超级密码配置及功能启用指南 #### 一、超级密码的获取与配置 对于中兴F420/F460/F660系列光猫设备,可以通过特定的命令行接口方法来获取并配置超级密码。以下指南详细说明了这一过程的实现方法。 **步骤1:** 启动任意一种网络浏览器,并键入网址`http://192.168.1.1/web_shell_cmd.gch`以进入命令行操作界面。 **步骤2:** 输入指令`sendcmd1DBpUserInfo`(需注意指令间的空格和大小写格式),该指令用于查询当前登录所使用的用户名及密码。通常情况下,预设的用户名与密码为`telecomadmin/telecomadmin+数字`。 **步骤3:** 如果需要变更用户名,可以在命令行环境中键入`sendcmd1DBsetUserInfo0Usernameadmin`(同样需注意空格和大小写),将用户名更改为`admin`。 **步骤4:** 继续输入`sendcmd1DBsetUserInfo0Passwordadmin`(同样需注意空格和大小写),将密码也设定为`admin`。 **步骤5:** 完成修改后,必须执行保存操作,通过输入命令`sendcmd1DBsave`(注意空格和大小写),以最终确认设置。 #### 二、远程控制功能的禁用 为了保障网络安全,防止未经授权的远程访问,应按照以下步骤禁用远程控制功能: **步骤1:** 再次启动网络浏览器并输入网址`http://192.168.1.1/web_shell_cmd.gch`。 **步骤2:** 键入指令`se...

16,741

社区成员

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

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