能力值:
( LV2,RANK:10 )
|
-
-
2 楼
Decode 是解码或者解压缩吧
|
能力值:
( LV9,RANK:290 )
|
-
-
3 楼
我也知道它是个压缩算法
|
能力值:
( LV9,RANK:810 )
|
-
-
4 楼
基于字典压缩的,看看LZ系列的那几个算法
|
能力值:
(RANK:1010 )
|
-
-
5 楼
不知道叫什么名字,
看起来只是一个简单的解压算法
大致思路如下:
一个源串:source
一个目标串:dest
一个辅助数组:dict
1、逐字节扫描source串,结构为“flag+data”,可以把source串看做若干个这样的结构:
结构为:1).1个flag字节
2).8个数据(连续的,每一个的数据为1个字节或2个字节,这是由flag位决定)
flag字节的每个位依次对应1个数据。如果flag的第i位为1,那么第i个数据直接写入目标串
2、如果flag的第j位为0,那么这个结构中的第j个数据为两个字节。
例如:假设磁盘的十六进制存储形式为……ABCD……
==》pos = 0XCBA ;len = D + 3 ;
这里的len实际上表示表示的是向目标串dest中写入的字节数。
而这 len 个字节的数据是通过辅助数组dict的
程序中的:dict[(pos + i) & 0x0fff]
显然dict中以pos为起点的连续len个字节就是要写入的数据。
当然,如果到达dict尾时要回到索引0位置。
3、上面两个是重点,当然还有一些操作,比如每次向dest中写入数据的时候,都需要
在dict的对应项中生成一个值。
相信这些构不成难度。
只要搞清楚上面两点就OK 了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我不知道这是“压缩算法”,我只是觉得是“解压缩算法”
最初由 Pr0Zel 发布 我也知道它是个压缩算法
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
好像这个算法在Molebox里也见过,不过不清楚叫什么。
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
看起来是一个非常简单的基于LZ算法的解压程序。
字典是4KB,有点像LZRW1算法.
//LZRW1解压程序:
U32 LZRW1::Decompress(U8 *src,U32 srclen,U8 *dst)
{
U32 ctrl=1; U8 *srcnow=src+1; U8 *dstnow=dst;
if(*src==LZRW1_FLAG_RAW)
{
memcpy(dstnow,src+1,srclen-1);
dstnow+=srclen-1;
}
else
{
if(*src!=LZRW1_FLAG_LZRW1) LZRW1_ERROR_BLOCKFLAG;
while(srcnow<src+srclen)
{
if(ctrl==1) ctrl=0x100+*srcnow++;
if(ctrl&1)
{
U32 off=((srcnow[0]&0xF0)<<4)+srcnow[1];
U32 len= (srcnow[0]&0x0F)+1; srcnow+=2;
U8 *p=dstnow-off;
while(len--) *dstnow++=*p++;
}
else
*dstnow++=*srcnow++;
ctrl>>=1;
}
}
return dstnow-dst;
}
|
能力值:
( LV8,RANK:130 )
|
-
-
9 楼
好!学习v
|
|
|