-
-
请问这是什么压缩算法?
-
2006-1-3 14:02
5813
-
是头一次看到的,请问这是什么样的压缩算法呢?
void CToHeart2Dlg::Decode(BYTE *dest, BYTE *src, DWORD filesize)
{
const int DICT_SIZE = 4096;
const int MAX_LENGTH = 18;
DWORD restsize = filesize;
BYTE dict[DICT_SIZE];
memset(dict, 0, DICT_SIZE - MAX_LENGTH);
int pos_dict = DICT_SIZE - MAX_LENGTH;
for (LPBYTE pdest = dest;restsize > 0;)
{
int flag = *src++;
for(int mask = 0x0001;mask < 0x0100;mask <<= 1)
{
int data = *src++;
if(mask & flag)
{ /* flag bit = 1 */
*pdest++ = data;
dict[pos_dict++] = data;
if(pos_dict == DICT_SIZE)
pos_dict = 0;
if(--restsize <= 0)
break;
}
else
{ /* flag bit = 0 */
int i = *src++;
int pos = data | ((i & 0xf0) << 4); /* position (12 bit) */
int len = (i & 0x0f) + 3; /* length (4 bit) */
for(i = 0;i < len;i++)
{
data = dict[(pos + i) & 0x0fff]; /* (DICT_SIZE - 1) */
*pdest++ = data;
dict[pos_dict++] = data;
if(pos_dict == DICT_SIZE)
pos_dict = 0;
if(--restsize <= 0)
return;
}
}
}
}
}
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界