📄 csdn技术中心 lz77压缩算法(c语言版).htm
字号:
<TD align=right><A
href="http://dev.csdn.net/articlelist.aspx?c=10">游戏开发</A> (<A
href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=10">rss</A>) </TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/articlelist.aspx?c=12">网站制作技术</A> (<A
href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=12">rss</A>) </TD></TR></TBODY></TABLE>
<TABLE style="MARGIN-BOTTOM: 4px" cellSpacing=0 cellPadding=0
width="95%" align=center border=0>
<TBODY>
<TR>
<TD style="COLOR: #0033ff; BORDER-BOTTOM: #b0c4de 1px dashed"
align=right><FONT style="FONT-SIZE: 8pt">数据库</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/articlelist.aspx?c=8">数据库开发</A> (<A
href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=8">rss</A>) </TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="95%" align=center
border=0>
<TBODY>
<TR>
<TD style="COLOR: #0033ff; BORDER-BOTTOM: #b0c4de 1px dashed"
align=right><FONT style="FONT-SIZE: 8pt">软件工程</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/articlelist.aspx?c=13">其他</A> (<A
href="http://www.csdn.net/Rss/RssFeed.aspx?rssid=1&bigclassid=13">rss</A>) </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE cellSpacing=1 cellPadding=0 width="100%" bgColor=#000000
border=0><TBODY>
<TR>
<TD vAlign=top bgColor=#ededed>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right
background="CSDN技术中心 LZ77压缩算法(C语言版).files/top.gif"
height=27><FONT
class=fonttitle>积极原创作者 </FONT></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=1 cellPadding=2 width="100%" border=0>
<TBODY>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/ngnr">ngnr</A> <FONT
color=#ff0000>(21)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/kui">kui</A> <FONT
color=#ff0000>(22)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/met3or">met3or</A> <FONT
color=#ff0000>(1)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/ilzzy">ilzzy</A> <FONT
color=#ff0000>(1)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/ycool1984">ycool1984</A> <FONT
color=#ff0000>(27)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/alexdoes">alexdoes</A> <FONT
color=#ff0000>(15)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/conquer">conquer</A> <FONT
color=#ff0000>(3)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/WonderOne">WonderOne</A> <FONT
color=#ff0000>(2)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/qyii">qyii</A> <FONT
color=#ff0000>(2)</FONT></TD></TR>
<TR>
<TD align=right><A
href="http://dev.csdn.net/user/kalex">kalex</A> <FONT
color=#ff0000>(5)</FONT></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top width=786>
<TABLE cellPadding=4 width="100%" border=0>
<TBODY>
<TR>
<TD width=10 height=19></TD>
<TD height=19>
<TABLE cellSpacing=3 cellPadding=3 width="100%" border=0>
<TBODY>
<TR>
<TD><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://dev.csdn.net/">文档中心</A> - <FONT color=#003399><A
id=ArticleTitle1_ArticleTitle1_hlClass
href="http://dev.csdn.net/articlelist.aspx?c=9">其他开发语言
</A></FONT></TD>
<TD align=right>阅读:<SPAN
id=ArticleTitle1_ArticleTitle1_lblReadCount>603</SPAN>
评论: <SPAN
id=ArticleTitle1_ArticleTitle1_lblCommentCount>0</SPAN>
<A
href="http://dev.csdn.net/article/40/40199.shtm#Comment">参与评论</A>
</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3 cellPadding=3 width="100%" bgColor=#eeeeee
border=0>
<TBODY>
<TR>
<TD noWrap width=60 height=0></TD>
<TD></TD></TR>
<TR>
<TD noWrap align=middle bgColor=#003399 height=16><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> <SPAN
id=ArticleTitle1_ArticleTitle1_lblTitle>LZ77压缩算法(C语言版)</SPAN></B>
选择自 <A id=ArticleTitle1_ArticleTitle1_AuthorLink
href="http://dev.csdn.net/user/www_307">www_307</A> 的 Blog
</TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=16><FONT
color=#ffffff>关键字</FONT></TD>
<TD width=500> <SPAN
id=ArticleTitle1_ArticleTitle1_lblKeywords>LZ77压缩算法(C语言版)</SPAN></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=16><FONT
color=#ffffff>出处</FONT></TD>
<TD> <SPAN
id=ArticleTitle1_ArticleTitle1_lblSource></SPAN></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD width=10></TD>
<TD><SPAN id=ArticleContent1_ArticleContent1_lblContent><SPAN
id=post1
style="FONT-SIZE: 12px; COLOR: #000000">测试压缩一个425K的文件需要9.4秒,压缩后的文件为177K。<BR><BR><BR>/*********************************************************************<BR>*<BR>*
Project description:<BR>* Lz77
compression/decompression
algorithm.<BR>*<BR>*********************************************************************/<BR><BR><BR>#include
<windows.h><BR>#include <conio.h><BR>#include
<stdio.h><BR>#include <assert.h><BR><BR>#define
OFFSET_CODING_LENGTH (10)<BR>#define MAX_WND_SIZE
1024<BR>//#define
MAX_WND_SIZE
(1<<OFFSET_CODING_LENGTH)<BR>#define OFFSET_MASK_CODE
(MAX_WND_SIZE-1)<BR><BR>const ULONG
m=3;<BR><BR><BR>UCHAR
__buffer1__[0x200000];<BR>UCHAR
__buffer2__[0x200000];<BR><BR><BR>////////////////////////////////////////////////////////////////////////////////<BR><BR>void<BR>Write1ToBitStream(<BR>
PUCHAR pBuffer,<BR> ULONG
ulBitOffset<BR> )<BR>{<BR> ULONG
ulByteBoundary;<BR> ULONG
ulOffsetInByte;<BR><BR> ulByteBoundary =
ulBitOffset>>3 ;<BR> ulOffsetInByte =
ulBitOffset&7;<BR><BR> *(pBuffer+ulByteBoundary) |=
(1<<ulOffsetInByte);<BR>}<BR><BR>void<BR>Write0ToBitStream(<BR>
PUCHAR pBuffer,<BR> ULONG
ulBitOffset<BR> )<BR>{<BR> ULONG
ulByteBoundary;<BR> ULONG
ulOffsetInByte;<BR><BR> ulByteBoundary =
ulBitOffset>>3 ;<BR> ulOffsetInByte =
ulBitOffset&7;<BR><BR> *(pBuffer+ulByteBoundary)
&=
(~(1<<ulOffsetInByte));<BR>}<BR><BR>ULONG<BR>ReadBitFromBitStream(<BR>
PUCHAR pBuffer,<BR> ULONG
ulBitOffset<BR> )<BR>{<BR> ULONG
ulByteBoundary;<BR> ULONG
ulOffsetInByte;<BR><BR> ulByteBoundary =
ulBitOffset>>3 ;<BR> ulOffsetInByte =
ulBitOffset&7;<BR><BR> return
((*(PULONG)(pBuffer+ulByteBoundary))>>ulOffsetInByte)&1
;<BR>}<BR><BR><BR>ULONG WINAPI<BR>WriteGolombCode(<BR>
ULONG x,<BR> PUCHAR
pBuffer,<BR> ULONG ulBitOffset<BR>
)<BR>{<BR> ULONG
q, r;<BR> int
i;<BR><BR> q = (x-1)>>m;<BR> r
= x-(q<<m)-1;<BR><BR> for(i=0; (ULONG)i<q; i++,
ulBitOffset++)<BR> {<BR>
Write1ToBitStream(pBuffer, ulBitOffset);<BR>
}<BR> Write0ToBitStream(pBuffer,
ulBitOffset);<BR> ulBitOffset++;<BR><BR>
for(i=0; i<m; i++, ulBitOffset++)<BR>
{<BR> if( (r>>i)&1
)<BR> {<BR>
Write1ToBitStream(pBuffer, ulBitOffset);<BR>
}<BR> else<BR>
{<BR>
Write0ToBitStream(pBuffer, ulBitOffset);<BR>
}<BR> }<BR><BR> return
m+q+1;<BR>}<BR><BR><BR>ULONG<BR>ReadGolombCode(<BR>
PULONG pulCodingLength,<BR> PUCHAR
pBuffer,<BR> ULONG ulBitOffset<BR>
)<BR>{<BR> ULONG q, r;<BR>
ULONG bit;<BR> int i;<BR><BR>
for(q=0; ;q++)<BR> {<BR>
bit = (ULONG)ReadBitFromBitStream(pBuffer,
ulBitOffset);<BR> ulBitOffset++;<BR>
if( !bit )<BR>
{<BR> break;<BR>
}<BR> }<BR><BR><BR>
for(i=0, r=0; (ULONG)i<m; i++, ulBitOffset++)<BR>
{<BR> bit =
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -