设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 11509|回复: 14
收起左侧

10多KB的源码实现超简单数据无损压缩解压算法V1.0 - 纯核心库实现无需DLL

[复制链接]
发表于 2018-9-2 19:22:10 | 显示全部楼层 |阅读模式
1.png
2.png

3.png


  1. .版本 2

  2. .程序集 窗口程序集_启动窗口

  3. .子程序 _启动子程序, 整数型
  4. .局部变量 压缩前, 字节集
  5. .局部变量 压缩后, 字节集
  6. .局部变量 压缩前大小, 整数型
  7. .局部变量 压缩后大小, 整数型
  8. .局部变量 压缩率, 双精度小数型

  9. 压缩前 = 取重复字节集 (1000, 到字节集 (“Hello World!”))
  10. 压缩前大小 = 取字节集长度 (压缩前)
  11. 输出调试文本 (“压缩前:” + 到文本 (压缩前大小))
  12. 压缩后 = 数据压缩 (压缩前)
  13. 压缩后大小 = 取字节集长度 (压缩后)
  14. 输出调试文本 (“压缩后:” + 到文本 (压缩后大小))
  15. 压缩率 = 压缩后大小 ÷ 压缩前大小 × 100
  16. 输出调试文本 (“压缩率:” + 到文本 (压缩率) + “%”)

  17. .如果 (数据解压 (压缩后) = 压缩前)
  18.     输出调试文本 (“解压正确”)
  19. .否则
  20.     输出调试文本 (“解压错误”)
  21. .如果结束


  22. 返回 (0)

  23. .子程序 取字节集出现的字符, 字节集
  24. .参数 字节集数据, 字节集
  25. .局部变量 已出现的字符, 逻辑型, , "256"
  26. .局部变量 出现的字符字节型数组, 字节型, , "0"
  27. .局部变量 计数, 整数型
  28. .局部变量 出现字符数, 字节型

  29. .计次循环首 (取字节集长度 (字节集数据), 计数)
  30.     .如果真 (已出现的字符 [字节集数据 [计数] + 1] = 假)
  31.         已出现的字符 [字节集数据 [计数] + 1] = 真
  32.         出现字符数 = 出现字符数 + 1
  33.         .如果真 (出现字符数 = 0)
  34.             跳出循环 ()
  35.         .如果真结束

  36.     .如果真结束

  37. .计次循环尾 ()
  38. 返回 (逻辑型数组到字节集 (已出现的字符))

  39. .子程序 压缩前编码, 字节集
  40. .参数 俗操作的数据, 字节集
  41. .参数 索引表, 字节集, 参考
  42. .局部变量 出现的字符, 逻辑型, , "0"
  43. .局部变量 长度, 整数型
  44. .局部变量 返回值, 字节集
  45. .局部变量 计数, 整数型
  46. .局部变量 出现的字符表, 字节型, , "0"
  47. .局部变量 位置, 整数型
  48. .局部变量 计数2, 整数型

  49. 长度 = 取字节集长度 (俗操作的数据)
  50. 返回值 = 取空白字节集 (长度)
  51. 索引表 = 取字节集出现的字符 (俗操作的数据)
  52. 字节集到逻辑型数组 (索引表, 出现的字符)
  53. 重定义数组 (出现的字符表, 假, 256)
  54. .计次循环首 (256, 计数)
  55.     .如果真 (出现的字符 [计数])
  56.         出现的字符表 [计数] = 计数2
  57.         计数2 = 计数2 + 1
  58.     .如果真结束

  59. .计次循环尾 ()
  60. .计次循环首 (长度, 计数)
  61.     返回值 [计数] = 出现的字符表 [俗操作的数据 [计数] + 1]
  62. .计次循环尾 ()
  63. 返回 (返回值)


  64. .子程序 解压后解码, 字节集
  65. .参数 俗操作的数据, 字节集
  66. .参数 索引表, 字节集, 参考
  67. .局部变量 返回值, 字节集
  68. .局部变量 长度, 整数型
  69. .局部变量 出现的字符, 逻辑型, , "0"
  70. .局部变量 计数, 整数型
  71. .局部变量 出现的字符表, 字节型, , "0"

  72. 长度 = 取字节集长度 (俗操作的数据)
  73. 返回值 = 取空白字节集 (长度)
  74. 字节集到逻辑型数组 (索引表, 出现的字符)
  75. 重定义数组 (出现的字符表, 假, 0)
  76. .计次循环首 (256, 计数)
  77.     .如果真 (出现的字符 [计数])
  78.         加入成员 (出现的字符表, 计数 - 1)
  79.     .如果真结束

  80. .计次循环尾 ()
  81. .计次循环首 (长度, 计数)
  82.     返回值 [计数] = 出现的字符表 [俗操作的数据 [计数] + 1]
  83. .计次循环尾 ()
  84. 返回 (返回值)


  85. .子程序 内部压缩, 字节集
  86. .参数 数据, 字节集
  87. .局部变量 数据进制, 字节型
  88. .局部变量 计数, 整数型
  89. .局部变量 长度, 整数型

  90. 长度 = 取字节集长度 (数据)
  91. .如果真 (长度 = 0)
  92.     返回 ({  })
  93. .如果真结束
  94. .计次循环首 (取字节集长度 (数据), 计数)
  95.     .如果真 (数据 [计数] > 数据进制)
  96.         数据进制 = 数据 [计数]
  97.         .如果真 (数据进制 = 255)
  98.             跳出循环 ()
  99.         .如果真结束

  100.     .如果真结束

  101. .计次循环尾 ()
  102. .如果真 (数据进制 = 0)
  103.     数据进制 = 1
  104. .如果真结束
  105. 返回 (到字节集 (数据进制) + 任意进制转换 ({ 1 } + 数据, 数据进制, 255))



  106. .子程序 内部解压, 字节集
  107. .参数 数据, 字节集
  108. .局部变量 解压后数据, 字节集

  109. 解压后数据 = 任意进制转换 (取字节集右边 (数据, 取字节集长度 (数据) - 1), 255, 数据 [1])
  110. 返回 (取字节集右边 (解压后数据, 取字节集长度 (解压后数据) - 1))


  111. .子程序 数据压缩, 字节集, 公开
  112. .参数 数据, 字节集
  113. .局部变量 索引表, 字节集
  114. .局部变量 编码后, 字节集
  115. .局部变量 返回值, 字节集

  116. 编码后 = 压缩前编码 (数据, 索引表)
  117. 返回 (索引表 + 内部压缩 (编码后))

  118. .子程序 数据解压, 字节集, 公开
  119. .参数 数据, 字节集
  120. .局部变量 索引表, 字节集
  121. .局部变量 解压前数据, 字节集

  122. 索引表 = 取字节集左边 (数据, 32)
  123. 解压前数据 = 取字节集右边 (数据, 取字节集长度 (数据) - 32)
  124. 返回 (解压后解码 (内部解压 (解压前数据), 索引表))

  125. .子程序 字节集到逻辑型数组
  126. .参数 字节集数据, 字节集
  127. .参数 逻辑型数组, 逻辑型, 参考 数组
  128. .局部变量 字节集长度, 整数型
  129. .局部变量 字节集计数, 整数型
  130. .局部变量 移位位数计数, 整数型
  131. .局部变量 移位后的值, 字节型
  132. .局部变量 逻辑数组计数, 整数型

  133. 字节集长度 = 取字节集长度 (字节集数据)
  134. 重定义数组 (逻辑型数组, 假, 字节集长度 × 8)
  135. .计次循环首 (字节集长度, 字节集计数)
  136.     .变量循环首 (0, 7, 1, 移位位数计数)
  137.         逻辑数组计数 = 逻辑数组计数 + 1
  138.         移位后的值 = 左移 (1, 移位位数计数)
  139.         逻辑型数组 [逻辑数组计数] = 位与 (字节集数据 [字节集计数], 移位后的值) = 移位后的值

  140.     .变量循环尾 ()

  141. .计次循环尾 ()


  142. .子程序 逻辑型数组到字节集, 字节集
  143. .参数 逻辑型数组, 逻辑型, 数组
  144. .局部变量 逻辑组长度, 整数型
  145. .局部变量 字节集数据, 字节集
  146. .局部变量 字节集长度, 整数型
  147. .局部变量 计数, 整数型
  148. .局部变量 移位计数, 整数型
  149. .局部变量 逻辑计数, 整数型

  150. 逻辑组长度 = 取数组成员数 (逻辑型数组)
  151. .如果真 (逻辑组长度 % 8 ≠ 0)
  152.     输出调试文本 (“数组成员数必须是8的倍数才可以导出字节集数据。”)
  153.     返回 ({  })
  154. .如果真结束
  155. 字节集数据 = 取空白字节集 (逻辑组长度 ÷ 8)
  156. 字节集长度 = 取字节集长度 (字节集数据)
  157. .计次循环首 (字节集长度, 计数)
  158.     .变量循环首 (0, 7, 1, 移位计数)
  159.         .如果真 (逻辑型数组 [逻辑计数 + 1] = 真)
  160.             字节集数据 [计数] = 位或 (左移 (1, 移位计数), 字节集数据 [计数])
  161.         .如果真结束
  162.         逻辑计数 = 逻辑计数 + 1
  163.     .变量循环尾 ()
  164. .计次循环尾 ()
  165. 返回 (字节集数据)


  166. .子程序 任意进制转换, 字节集
  167. .参数 欲操作的数据, 字节集
  168. .参数 原进制, 字节型, , 2进制为1、3进制为2、256进制为255
  169. .参数 目标进制, 字节型
  170. .局部变量 计数, 整数型
  171. .局部变量 长度, 整数型
  172. .局部变量 运算值, 整数型
  173. .局部变量 返回值, 字节集
  174. .局部变量 返回值_, 字节型, , "0"
  175. .局部变量 数组, 字节型, , "0"
  176. .局部变量 原进制2, 短整数型
  177. .局部变量 目标进制2, 短整数型

  178. .如果真 (原进制 = 目标进制)
  179.     返回 (欲操作的数据)
  180. .如果真结束
  181. 原进制2 = 原进制 + 1
  182. 目标进制2 = 目标进制 + 1

  183. 长度 = 取字节集长度 (欲操作的数据)
  184. 重定义数组 (数组, 假, 长度)
  185. 重定义数组 (返回值_, 假, 0)
  186. .计次循环首 (长度, 计数)
  187.     数组 [计数] = 欲操作的数据 [计数]
  188.     .如果真 (欲操作的数据 [计数] > 原进制)
  189.         输出调试文本 (“数据错误”)
  190.         返回 ({  })
  191.     .如果真结束

  192. .计次循环尾 ()
  193. .判断循环首 (长度 ≥ 1)

  194.     运算值 = 0

  195.     .计次循环首 (长度, 计数)

  196.         运算值 = 运算值 × 原进制2 + 数组 [计数]
  197.         数组 [计数] = 运算值 ÷ 目标进制2
  198.         运算值 = 运算值 % 目标进制2
  199.     .计次循环尾 ()

  200.     加入成员 (返回值_, 运算值)
  201.     运算值 = 1
  202.     .判断循环首 (运算值 ≤ 长度 且 数组 [运算值] = 0)
  203.         运算值 = 运算值 + 1
  204.     .判断循环尾 ()
  205.     删除成员 (数组, 1, 运算值 - 1)
  206.     长度 = 取数组成员数 (数组)
  207. .判断循环尾 ()
  208. 长度 = 取数组成员数 (返回值_)
  209. 返回值 = 取空白字节集 (长度)
  210. .计次循环首 (长度, 计数)
  211.     返回值 [计数] = 返回值_ [长度 - 计数 + 1]
  212. .计次循环尾 ()
  213. 返回 (返回值)


复制代码

评分

2

查看全部评分

相关帖子

发表于 2018-10-16 22:40:21 | 显示全部楼层
欣欣 发表于 2018-9-2 23:42
昨天那谁没回哪贴这贴可能不会有

什么意思???
发表于 2020-3-16 10:04:05 | 显示全部楼层

我也没搞清楚
发表于 2018-9-2 23:42:14 | 显示全部楼层
昨天那谁没回哪贴这贴可能不会有
发表于 2018-9-2 20:14:54 | 显示全部楼层
一楼来看看
发表于 2018-9-2 20:22:46 | 显示全部楼层
这效率也是....
发表于 2018-9-3 09:59:06 | 显示全部楼层
看看吧正好需要
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-25 06:17 , Processed in 1.679096 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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