开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1181|回复: 7
收起左侧

[讨论] 易语言自带的压缩数据和ZLIB压缩的区别

[复制链接]
结帖率:67% (2/3)
发表于 2024-1-12 12:24:08 | 显示全部楼层 |阅读模式   湖南省永州市
本帖最后由 江山少主 于 2024-1-12 12:27 编辑

在使用压缩和解压数据过程中,易自带有这项功能,
在论坛搜索看还有没有更好的方式,
发现下贴ZLIB压缩方式。
原贴:https://bbs.125.la/forum.php?mod ... 9%E6%95%B0%E6%8D%AE

但在两项测试对比后,发现一个问题。搞不明白,放上来讨论一下。

  
子程序名返回值类型公开备 注
测试  
变量名类 型静态数组备 注
文件号整数型 
文本内容文本型 
原始内容字节集 
压缩内容字节集 
解压内容字节集 
文件号 = 打开文件 (取特定目录 ( #系统桌面 )“\8.dll”, #读入, )
文本内容 = 读入文本 (文件号, )
关闭文件 (文件号)
原始内容 = 到字节集 (文本内容)
调试输出 (“原始内容长度:”到文本 (取字节集长度 (原始内容)))
压缩内容 = {  }
解压内容 = {  }
压缩内容 = 压缩数据 (原始内容)
' 解压内容 = 解压数据 (压缩内容)
调试输出 (“易压缩后长度:”到文本 (取字节集长度 (压缩内容)) + “    易解压后长度:”到文本 (取字节集长度 (解压内容)))
压缩内容 = {  }
解压内容 = {  }
压缩内容 = ZLIB压缩 (原始内容)
' 解压内容 = ZLIB解压 (压缩内容)
调试输出 (“ZLIB压缩长度:”到文本 (取字节集长度 (压缩内容)) + “    ZLIB解压长度:”到文本 (取字节集长度 (解压内容)))


i支持库列表   支持库注释   
shell操作系统界面功能支持库
spec特殊功能支持库
dp1数据操作支持库一


这是源码。

在屏蔽解压内容的时候,两件压缩的长度是一样的。

VX截图_20240112120649.png

但在屏蔽解压内容后,两项压缩长度就不一样了。ZLIB会少8个字节。我调换了先后顺序者都是一样的。
VX截图_20240112120625.png

在经过第三次测试时,
发现ZLIB先压缩,立刻取压缩后的长度,和等解压后,取未解压的长度居然不一样。难道是解后会影响,原字节集内容?
但易自带的解压数据就没有这个问题。

搞不明白,放到上面讨论下。
VX截图_20240112121953.png

附源码。
压缩数据.rar (891.26 KB, 下载次数: 21)
发表于 2024-8-3 01:39:51 | 显示全部楼层   湖北省黄冈市
回复 支持 反对

使用道具 举报

发表于 2024-8-3 01:39:11 | 显示全部楼层   湖北省黄冈市
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)

签到天数: 3 天

 楼主| 发表于 2024-1-12 15:39:54 | 显示全部楼层   湖南省永州市
2576605471 发表于 2024-1-12 14:20
测试例子, 这样是真的, 真的是BUG, 调用函数后, 外面的值反而被改变了, 跟打钩了参考一样. ...

看了一下,参数对参考的解释:其中就有文本型是作为指针传递的,所以不管勾没勾参考,都将默认为勾了参考

设置系统为当前子程序参数传递数据时是否为传递指向数据的指针。如果所传递过来的参数数据为数组、用户定义数据类型、库定义数据类型、文本型、字节集型数据,则无论此属性是否为真,都将传递指针。如果所传递过来数据的类型与相应位置处参数的数据类型不一致但可以相互转换,譬如将“整数型”数据传递到“小数型”的参数中,则在数据被实际传递前,系统将首先自动将“整数型”数据转换为“小数型” 数据,然后再进行传递。因此在这种情况下,即使本属性为真,系统也无法传递指向原数据的指针,只能传递数据本身。如果系统将数据指针成功地传递过来,那么在子程序中对此参数内容的更改将会相应地反映到调用子程序时所提供的参数数据上。
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 23 天

发表于 2024-1-12 14:24:09 | 显示全部楼层   湖南省株洲市
2576605471 发表于 2024-1-12 14:20
测试例子, 这样是真的, 真的是BUG, 调用函数后, 外面的值反而被改变了, 跟打钩了参考一样. ...

嗯 整数就不会改变.
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)
发表于 2024-1-12 14:20:53 | 显示全部楼层   广东省阳江市
人善帝王心 发表于 2024-1-12 14:06
[e=2].版本 2

.子程序 ZLIB解压, 字节集, 公开, 将被zlib压缩过的字节集数据进行解压,成功返回解压后字节 ...

测试例子, 这样是真的, 真的是BUG, 调用函数后, 外面的值反而被改变了, 跟打钩了参考一样.

点评

嗯 整数就不会改变.   湖南省株洲市  详情 回复 发表于 2024-1-12 14:24
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 23 天

发表于 2024-1-12 14:06:35 | 显示全部楼层   湖南省株洲市
  
子程序名返回值类型公开备 注
ZLIB解压字节集 将被zlib压缩过的字节集数据进行解压,成功返回解压后字节集,失败返回空字节集
参数名类 型参考可空数组备 注
source字节集被zlib压缩过的字节集数据
变量名类 型静态数组备 注
原始数据字节集 
原始长度整数型 
source1字节集被zlib压缩过的字节集数据
postion整数型 
source1 = source
postion = 1
如果真 (取字节集数据 (source1, #整数型, postion)#ezlib )
返回 ({  })
原始长度 = 取字节集数据 (source1, #整数型, postion)
source1 = 取字节集右边 (source1, 取字节集长度 (source1) (postion - 1))
原始数据 = 取空白字节集 (原始长度)
判断 (uncompress (原始数据, 原始长度, source1, 取字节集长度 (source1)) = 0)
返回 (取字节集左边 (原始数据, 原始长度))  ' 原始长度会在数据成功解压后返回解压后的正确长度,直接取回左边即可
返回 ({  })


这样就影响不到传值!这应该是易语言的BUG

  
s = “1”
子程序1 (s)
调试输出 (s)
子程序名返回值类型公开备 注
子程序1  
参数名类 型参考可空数组备 注
s文本型
s = “2”


i支持库列表   支持库注释   
spec特殊功能支持库

调试结果  按理没选择参数  结果是“1”  返回会是2
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 23 天

发表于 2024-1-12 14:00:48 | 显示全部楼层   湖南省株洲市
解压参数source 在解压里去掉了前8个字节  所以长度不一样,参数被参考了,那个长度没影响。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表