找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6637|回复: 3

[系统工具] 【下载】API压缩数据

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2009-8-25 10:34:28 | 显示全部楼层 |阅读模式
  1. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
  2. Private Declare Function InitDecompression Lib "gzip.dll" () As Long
  3. Private Declare Function CreateDecompression Lib "gzip.dll" (ByRef context As Long, ByVal Flags As Long) As Long
  4. Private Declare Function DestroyDecompression Lib "gzip.dll" (ByRef context As Long) As Long
  5. Private Declare Function Decompress Lib "gzip.dll" (ByVal context As Long, inBytes As Any, ByVal input_size As Long, outBytes As Any, ByVal output_size As Long, ByRef input_used As Long, ByRef output_used As Long) As Long
  6. Private Const OFFSET As Long = &H8

  7. '解压缩数组
  8. Public Function UnCompressByte(ByteArray() As Byte) As Boolean
  9. Dim BufferSize As Long
  10. Dim buffer() As Byte
  11. Dim lReturn As Long
  12. Dim outUsed As Long
  13. Dim inUsed As Long
  14.     '创建解压缩后的缓存
  15.     CopyMemory BufferSize, ByteArray(0), OFFSET
  16.     BufferSize = BufferSize + (BufferSize * 0.01) + 12
  17.     ReDim buffer(BufferSize) As Byte
  18.     '创建解压缩进程
  19.     Dim contextHandle As Long: InitDecompression
  20.     CreateDecompression contextHandle, 1    '创建
  21.     '解压缩数据
  22.     lReturn = Decompress(ByVal contextHandle, ByteArray(0), UBound(ByteArray) + 1, buffer(0), BufferSize, inUsed, outUsed)
  23.     DestroyDecompression contextHandle
  24.     '删除重复的数据
  25.     ReDim Preserve ByteArray(0 To outUsed - 1)
  26.     CopyMemory ByteArray(0), buffer(0), outUsed
  27. End Function
复制代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-8-26 00:51:52 | 显示全部楼层
  1. Option Explicit
  2. 'Declares
  3. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
  4. Private Declare Function Compress Lib "zlibwapi.dll" Alias "compress" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long
  5. Private Declare Function uncompress Lib "zlibwapi.dll" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long
  6. Private Const OFFSET As Long = &H8
  7. '压缩数组
  8. Public Function CompressByte(ByteArray() As Byte) As Boolean
  9.     Dim BufferSize As Long
  10.     Dim TempBuffer() As Byte
  11.     'Create a buffer to hold the compressed data
  12.     BufferSize = UBound(ByteArray) + 1
  13.     BufferSize = BufferSize + (BufferSize * 0.01) + 12
  14.     ReDim TempBuffer(BufferSize)
  15.     'Compress byte array (data)
  16.     CompressByte = (Compress(TempBuffer(0), BufferSize, ByteArray(0), UBound(ByteArray) + 1) = 0)
  17.     'Add the size of the original data
  18.     Call CopyMemory(ByteArray(0), CLng(UBound(ByteArray) + 1), OFFSET)
  19.     'Remove redundant data
  20.     ReDim Preserve ByteArray(0 To BufferSize + OFFSET - 1)
  21.     CopyMemory ByteArray(OFFSET), TempBuffer(0), BufferSize
  22. End Function
  23. '解压缩数组
  24. Public Function UnCompressByte(ByteArray() As Byte) As Boolean
  25.     Dim OrigLen As Long
  26.     Dim BufferSize As Long
  27.     Dim TempBuffer() As Byte
  28.     'Get the original size
  29.     Call CopyMemory(OrigLen, ByteArray(0), OFFSET)
  30.     'Create a buffer to hold the uncompressed data
  31.     BufferSize = OrigLen
  32.     BufferSize = BufferSize + (BufferSize * 0.01) + 12
  33.     ReDim TempBuffer(BufferSize)
  34.     'Decompress data
  35.     UnCompressByte = (uncompress(TempBuffer(0), BufferSize, ByteArray(OFFSET), UBound(ByteArray) - OFFSET + 1) = 0)
  36.     'Remove redundant data
  37.     ReDim Preserve ByteArray(0 To BufferSize - 1)
  38.     CopyMemory ByteArray(0), TempBuffer(0), BufferSize
  39. End Function
复制代码
加个压缩的就全了,嘿嘿.
我就是嗷嗷叫的老马了......

0

主题

7

回帖

0

精华

初来乍到

积分
21
发表于 2013-4-18 13:30:57 | 显示全部楼层
那是不同的 zlibwapi gzip 系统好像没有这两个

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-4-26 10:06:19 | 显示全部楼层
真的好厉害
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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