有人能找到这个解压代码的压缩算法吗?算法不是我的强项,我编写代码的朋友没有添加注释,并且在离开之前不知何故丢失了压缩代码。哈。
static inline unsigned char getbit_le(unsigned char byte, unsigned int pos)
{
return !!(byte & (1 << pos));
}
static inline unsigned char getbyte_le(unsigned char byte)
{
return byte;
}
static int lzss_decompress(BYTE *uncompr, DWORD uncomprLen,
BYTE *compr, DWORD comprLen)
{
unsigned int act_uncomprlen = 0;
unsigned int curbyte = 0;
unsigned int nCurWindowByte = 0xfee;
unsigned char window[4096];
unsigned int win_size = 4096;
memset(window, 0, win_size);
while (1) {
unsigned char bitmap;
if (curbyte >= comprLen)
break;
bitmap = getbyte_le(compr[curbyte++]);
for (unsigned int curbit_bitmap = 0; curbit_bitmap < 8; curbit_bitmap++) {
if (getbit_le(bitmap, curbit_bitmap)) {
unsigned char data;
if (curbyte >= comprLen)
goto out;
if (act_uncomprlen >= uncomprLen)
goto out;
data = ~getbyte_le(compr[curbyte++]);
uncompr[act_uncomprlen++] = data;
window[nCurWindowByte++] = data;
nCurWindowByte &= win_size - 1;
} else {
unsigned int copy_bytes, win_offset;
if (curbyte >= comprLen)
goto out;
win_offset = getbyte_le(compr[curbyte++]);
if (curbyte >= comprLen)
goto out;
copy_bytes = getbyte_le(compr[curbyte++]);
win_offset |= (copy_bytes >> 4) << 8;
copy_bytes &= 0x0f;
copy_bytes += 3;
for (unsigned int i = 0; i < copy_bytes; i++) {
unsigned char data;
if (act_uncomprlen >= uncomprLen)
goto out;
data = window[(win_offset + i) & (win_size - 1)];
uncompr[act_uncomprlen++] = data;
window[nCurWindowByte++] = data;
nCurWindowByte &= win_size - 1;
}
}
}
}
out:
return act_uncomprlen;
}