一段解压算法代码,求对应的压缩代码,谢谢!

s_phoenix 2006-09-30 02:00:27
高手来帮帮忙,谢谢!
Sub uncomp(ByVal ifile As String, ByVal ofile As String)
Dim dat(65) As Byte
Dim dat2(1) As Byte
Dim compdat As Long
Dim c As Long
Dim olen As Long
Dim ilen As Byte
c = 256
If Dir(ifile) = "" Then
Exit Sub
End If
If Dir(ofile) <> "" Then
kill(ofile)
End If
Open ifile For Binary As #1
Open ofile For Binary As #2
olen = 0
For i = 1 To LOF(1)
Get #1, i, dat
'从ifile读入i个字节进入dat
ilen = 0
compdat = dat(0) + dat(1) * c
ilen = ilen + 2
For t = 0 To 15
If compdat >= 32768 Then
ls1 = Int(dat(ilen + 1) / 8)
ls2 = (dat(ilen + 1) Mod 8) * c + dat(ilen)
ls2 = ls2 * 2
ilen = ilen + 2
If ls1 = 0 Then
ls1 = dat(ilen + 1) * c + dat(ilen)
ilen = ilen + 2
End If
For z = 1 To ls1
If ls2 > olen Then
dat2(0) = 0
dat2(1) = 0
Else
Get #2, olen - ls2 + 1, dat2
End If
Put #2, olen + 1, dat2
olen = olen + 2
Next z
Else
Put #2, olen + 1, dat(ilen)
Put #2, olen + 2, dat(ilen + 1)
olen = olen + 2
ilen = ilen + 2
End If
compdat = (compdat Mod 32768) * 2
Next t
i = i + ilen - 1
Next i
Close #1
Close #2
End Sub
...全文
353 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
eliphe 2006-11-09
用这个动态连接库吧,很好用的,免费的,没有任何限制。

wfZip 文件压缩链接库 v1.3 (免费)
http://www.wfsoft.com/middleware_info.asp?id=16
回复
pigsanddogs 2006-10-13
典型的LZ系列算法的变形。

解码方式为分快解码

块操作:
首先读16bit(一个WORD)的解码描述符,
然后从高位开始循环读这16位,
如果位为1
表示数据从前序字节中读(包含offset, len信息)
这个pos,len又采用了变长编码, 首先从instream中读16bit出来,
高3bit表示len,后15bit表示offset, 如果len为0, 则从instream中
读出16bit来表示len。
然后把outstream中的前offset的的数据拷贝len的长度到outstream中(典型的lz!!)
如果位为0
表示为原始数据, 从instream中读2个字节到outstream中
(可以看到一个快的instream最多为2+4*16=66byte, Dim dat(65) As Byte)


循环快操作, 直到文件结束


由于lz系列算法的特性,解码方式已经描述到了加密文件中, 所以没有固定的编码
根据字典dict以及滑动窗体window的不同。 可以获得不同的压缩率。


lz把着100分给我, 另外开个100分的帖, 我即把其中一种可用的压缩原码贴出来。
回复
Dunzip 2006-10-12
加密吧,接分
回复
s_phoenix 2006-10-12
up
回复
chenanlin1981 2006-09-30
支持一下!
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7485

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2006-09-30 02:00
社区公告
暂无公告