📄 csdn技术中心 lz77压缩算法(c语言版).htm
字号:
ulBitOffset;<BR><BR>}<BR><BR><BR>void lz77decompress(<BR>
PUCHAR pDataBuffer,<BR> ULONG
ulNumberOfBits,<BR> PUCHAR
pOutputBuffer,<BR> PULONG
pulNumberOfBytes<BR> )<BR>{<BR> LONG
iSlideWindowPtr;<BR> PUCHAR
pSlideWindowPtr;<BR><BR> ULONG
length, offset;<BR> ULONG bit;<BR>
UCHAR cc;<BR> int
i;<BR><BR> ULONG ulBytesDecoded;<BR>
ULONG ulBitOffset;<BR><BR> ULONG
ulCodingLength;<BR> PUCHAR pWrite;<BR><BR>
iSlideWindowPtr = -MAX_WND_SIZE;<BR> pWrite =
(PUCHAR)pOutputBuffer;<BR> ulBitOffset = 0;<BR>
ulBytesDecoded = 0;<BR><BR><BR> while(
ulBitOffset<ulNumberOfBits )<BR> {<BR>
bit = ReadBitFromBitStream(pDataBuffer,
ulBitOffset);<BR>
ulBitOffset++;<BR><BR> if( bit
)<BR> {<BR>
if( iSlideWindowPtr>=0 )<BR>
{<BR>
pSlideWindowPtr = pOutputBuffer +
iSlideWindowPtr;<BR><BR>
}<BR> else if(
iSlideWindowPtr>=-MAX_WND_SIZE )<BR>
{<BR>
pSlideWindowPtr = pOutputBuffer;<BR>
}<BR>
else<BR> {<BR>
pSlideWindowPtr =
NULL;<BR>
}<BR><BR><BR> for(i=0,
offset=0; i<OFFSET_CODING_LENGTH; i++, ulBitOffset++)<BR>
{<BR>
bit = ReadBitFromBitStream(pDataBuffer,
ulBitOffset);<BR>
offset |= (bit<<i);<BR>
}<BR><BR>
length= ReadGolombCode(&ulCodingLength, pDataBuffer,
ulBitOffset);<BR><BR>
assert(offset<MAX_WND_SIZE);<BR><BR>
if( length>MAX_WND_SIZE )<BR>
{<BR>
assert(length<=MAX_WND_SIZE);<BR>
}<BR>
ulBitOffset += ulCodingLength;<BR><BR>
RtlMoveMemory(pWrite,
pSlideWindowPtr+offset, length);<BR>
pWrite+=length;<BR>
iSlideWindowPtr+=length;<BR>
ulBytesDecoded+=length;<BR>
}<BR> else<BR>
{<BR> for(i=0, cc=0;
i<8 ; i++, ulBitOffset++)<BR>
{<BR>
bit = ReadBitFromBitStream(pDataBuffer,
ulBitOffset);<BR>
cc |= ((UCHAR)bit<<i);<BR>
}<BR><BR>
*pWrite++ = cc;<BR>
iSlideWindowPtr++;<BR>
ulBytesDecoded++;<BR>
}<BR><BR> }<BR><BR> *pulNumberOfBytes
= ulBytesDecoded;<BR>}<BR><BR>extern "C"<BR>void
WINAPI<BR>LZ77Compress(<BR> PUCHAR
__pDataBuffer,<BR> ULONG
__ulDataLength,<BR> PUCHAR
__pOutputBuffer,<BR> PULONG
__pulNumberOfBits<BR> );<BR><BR>extern "C"<BR>void
WINAPI<BR>LZ77Decompress(<BR> PUCHAR
__pDataBuffer,<BR> ULONG
__ulNumberOfBits,<BR> PUCHAR
__pOutputBuffer,<BR> PULONG
__pulNumberOfBytes<BR>
);<BR><BR>int<BR>main(<BR> int
argc,<BR> char *argv[]<BR>
)<BR>{<BR> FILE *fp=NULL;<BR>
FILE *fp1;<BR> ULONG
fsize;<BR> ULONG ulNumberOfBits;<BR>
ULONG ulFileCompressedSize;<BR> ULONG
ulFileDecompressedSize;<BR> SYSTEMTIME
t1, t2;<BR><BR> if( 3!=argc )<BR>
{<BR> printf("Usage: lz77 [/c | /d]
filename\n");<BR> return -1;<BR>
}<BR><BR><BR><BR>// char
s1[]="abcdabcdefgabcdefaffasda";<BR>// ULONG a,
b;<BR>// FindLongestSubstring((PUCHAR)s1, (PUCHAR)s1+11,
11,&a, &b );<BR>// return 0;<BR><BR> fp =
fopen(argv[2], "rb");<BR> if( !fp )<BR>
{<BR> return -1;<BR>
}<BR><BR> fseek(fp, 0, SEEK_END);<BR>
fsize = ftell(fp);<BR> fseek(fp, 0,
SEEK_SET);<BR><BR> fread(__buffer1__, 1, fsize,
fp);<BR><BR><BR> GetSystemTime(&t1);<BR>
lz77compress(__buffer1__, fsize, __buffer2__,
&ulNumberOfBits);<BR> //LZ77Compress(__buffer1__,
fsize, __buffer2__, &ulNumberOfBits);<BR>
GetSystemTime(&t2);<BR> ulFileCompressedSize =
((ulNumberOfBits+7)>>3);<BR><BR>
fp1=fopen("peinfo.c_", "wb+");<BR> if( !fp1
)<BR> {<BR> goto l1;<BR>
}<BR> fwrite(__buffer2__, 1, ulFileCompressedSize,
fp1);<BR> fclose(fp1);<BR><BR>
RtlZeroMemory(__buffer1__, sizeof(__buffer1__));<BR><BR>
lz77decompress(__buffer2__, ulNumberOfBits, __buffer1__,
&ulFileDecompressedSize);<BR>
//LZ77Decompress(__buffer2__, ulNumberOfBits, __buffer1__,
&ulFileDecompressedSize);<BR> fp1=fopen("peinfo.d_",
"wb+");<BR> if( !fp1 )<BR> {<BR>
goto l1;<BR> }<BR>
fwrite(__buffer1__, 1, ulFileDecompressedSize, fp1);<BR>
fclose(fp1);<BR><BR>l1:<BR> if( fp )<BR>
{<BR> fclose(fp);<BR>
}<BR><BR> ULONG milliS;<BR><BR>
milliS = ((t2.wHour - t1.wHour)*3600 +
(t2.wMinute-t1.wMinute)*60 + (t2.wSecond-t1.wSecond)) * 1000 +
(t2.wMilliseconds-t1.wMilliseconds);<BR> printf("Totally
%ld milliseconds elapsed!\n\n", milliS);<BR><BR>
printf("Press any key to exit!\n");<BR>
getch();<BR><BR> return
0;<BR>}<BR></SPAN></SPAN><BR>
<DIV
style="FONT-SIZE: 14px; LINE-HEIGHT: 25px"><STRONG>作者Blog:</STRONG><A
id=ArticleContent1_ArticleContent1_AuthorBlogLink
href="http://blog.csdn.net/www_307/"
target=_blank>http://blog.csdn.net/www_307/</A></DIV>
<DIV
style="FONT-SIZE: 14px; COLOR: #900; LINE-HEIGHT: 25px"><STRONG>相关文章</STRONG></DIV>
<TABLE id=ArticleContent1_ArticleContent1_RelatedArticles
style="BORDER-COLLAPSE: collapse" cellSpacing=0 border=0>
<TBODY>
<TR>
<TD><A
href="http://dev.csdn.net/article/40/article/53/53134.shtm">elf-write工具写interpreter后门</A>
</TD></TR>
<TR>
<TD><A
href="http://dev.csdn.net/article/40/article/48/48431.shtm">「病毒源代码专区」</A>
</TD></TR>
<TR>
<TD><A
href="http://dev.csdn.net/article/40/article/47/47529.shtm">WVTFTPD
0.9 heap overflow remote root exploit.c</A> </TD></TR>
<TR>
<TD><A
href="http://dev.csdn.net/article/40/article/47/47525.shtm">iptables_exp.c</A>
</TD></TR>
<TR>
<TD><A
href="http://dev.csdn.net/article/40/article/45/45349.shtm">Apache
mod_include_exp</A> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><A
name=#Comment></A>
<TABLE cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center
bgColor=#006699 border=0>
<TBODY>
<TR bgColor=#006699>
<TD id=white align=middle width=556 bgColor=#006699><FONT
color=#ffffff>对该文的评论</FONT> </TD></TR></TBODY></TABLE>
<DIV align=right><A id=CommnetList1_CommnetList1_Morelink
href="http://comment.csdn.net/Comment.aspx?c=2&s=40199">【评论】</A>
<A id=CommnetList1_CommnetList1_Hyperlink1
href="javascript:window.close();">【关闭】</A>
</DIV><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></FORM><!-- 版权 -->
<HR align=center width=770 noShade SIZE=1>
<TABLE cellSpacing=0 cellPadding=0 width=500 align=center border=0>
<TBODY>
<TR>
<TD vAlign=bottom align=middle height=10><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
height=48 src="CSDN技术中心 LZ77压缩算法(C语言版).files/biaoshi.gif" width=40
border=0></A></TD></TR>
<TR>
<TD vAlign=top align=middle>北京百联美达美数码科技有限公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.NET, Inc. All Rights
Reserved</FONT></TD></TR>
<TR>
<TD height=15></TD></TR></TBODY></TABLE><!-- /版权 -->
<SCRIPT>
document.write("<img src=http://count.csdn.net/count/pageview1.asp?columnid=4&itemid=11 border=0 width=0 height=0>");
</SCRIPT>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -