• 大小: 1.45MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-15
  • 语言: C/C++
  • 标签: lz  数据压缩  c  

资源简介

基于lz77的c语言代码 直接运行即可 直接往源文件.txt中输入信息,在压缩文件和解压文件中即有相应显示

资源截图

代码片段和文件信息


#include 
#include 
#include 
#include 
#include

#define OFFSET_CODING_LENGTH    (10)
#define MAX_WND_SIZE            1024

#define OFFSET_MASK_CODE        (MAX_WND_SIZE-1)

const ULONG     m=3;


UCHAR   __buffer1__[0x200000];
UCHAR   __buffer2__[0x200000];



void
Write1ToBitStream(
   PUCHAR  pBuffer
   ULONG   ulBitOffset
   )
{
   ULONG   ulByteBoundary;
   ULONG   ulOffsetInByte;

   ulByteBoundary = ulBitOffset>>3 ;
   ulOffsetInByte = ulBitOffset&7;

   *(pBuffer+ulByteBoundary) |= (1<}

void
Write0ToBitStream(
   PUCHAR  pBuffer
   ULONG   ulBitOffset
   )
{
   ULONG   ulByteBoundary;
   ULONG   ulOffsetInByte;

   ulByteBoundary = ulBitOffset>>3 ;
   ulOffsetInByte = ulBitOffset&7;

   *(pBuffer+ulByteBoundary) &= (~(1<}

ULONG
ReadBitFromBitStream(
   PUCHAR  pBuffer
   ULONG   ulBitOffset
   )
{
   ULONG   ulByteBoundary;
   ULONG   ulOffsetInByte;

   ulByteBoundary = ulBitOffset>>3 ;
   ulOffsetInByte = ulBitOffset&7;

   return ((*(PULONG)(pBuffer+ulByteBoundary))>>ulOffsetInByte)&1 ;
}


ULONG WINAPI
WriteGolombCode(
   ULONG   x
   PUCHAR  pBuffer
   ULONG   ulBitOffset
   )
{
   ULONG           q r;
   int             i;

   q = (x-1)>>m;
   r = x-(q<
   for(i=0; (ULONG)i   {
       Write1ToBitStream(pBuffer ulBitOffset);
   }
   Write0ToBitStream(pBuffer ulBitOffset);
   ulBitOffset++;

   for(i=0; i   {
       if( (r>>i)&1 )
       {
           Write1ToBitStream(pBuffer ulBitOffset);
       }
       else
       {
           Write0ToBitStream(pBuffer ulBitOffset);
       }
   }

   return m+q+1;
}


ULONG
ReadGolombCode(
   PULONG  pulCodingLength
   PUCHAR  pBuffer
   ULONG   ulBitOffset
   )
{
   ULONG   q r;
   ULONG   bit;
   int i;

   for(q=0; ;q++)
   {
       bit = (ULONG)ReadBitFromBitStream(pBuffer ulBitOffset);
       ulBitOffset++;
       if( !bit )
       {
           break;
       }
   }


   for(i=0 r=0; (ULONG)i   {
       bit = (ULONG)ReadBitFromBitStream(pBuffer ulBitOffset);
       bit <<= i;
       r |= bit;
   }

   *pulCodingLength = m + q + 1;

   return r+(q<}


ULONG
CompareStrings(
   PUCHAR  string1
   PUCHAR  string2
   ULONG   length
   )
{
   ULONG       i;
   PUCHAR      p1 p2;

   p1 = string1;
   p2 = string2;

   for(i=0; i   {
       if( *p1==*p2 )
       {
           p1++;
           p2++;
       }
       else
       {
           break;
       }
   }

   return p1-string1;
}


void WINAPI
FindLongestSubstring(
   PUCHAR  pSourceString
   PUCHAR  pString
   ULONG   ulSourceStringLength
   PULONG  pulSubstringOffset
   PULONG  pulSubstringLength
   )
{
   PUCHAR  pSrc;

   ULONG   offset length;

   ULONG   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-04-11 12:44  完成版lz77程序\
     目录           0  2014-04-11 12:44  完成版lz77程序\Debug\
     文件      233525  2014-04-11 12:31  完成版lz77程序\Debug\lz77.exe
     文件      273464  2014-04-11 12:31  完成版lz77程序\Debug\lz77.ilk
     文件       30226  2014-04-11 12:31  完成版lz77程序\Debug\lz77.obj
     文件     3627720  2014-04-11 12:18  完成版lz77程序\Debug\lz77.pch
     文件      574464  2014-04-11 12:31  完成版lz77程序\Debug\lz77.pdb
     文件      156672  2014-04-11 12:44  完成版lz77程序\Debug\vc60.idb
     文件       86016  2014-04-11 12:31  完成版lz77程序\Debug\vc60.pdb
     文件       11772  2014-04-11 12:31  完成版lz77程序\lz77.cpp
     文件        3377  2014-04-11 12:44  完成版lz77程序\lz77.dsp
     文件         516  2014-04-11 12:44  完成版lz77程序\lz77.dsw
     文件       50176  2014-04-11 12:44  完成版lz77程序\lz77.ncb
     文件       48640  2014-04-11 12:44  完成版lz77程序\lz77.opt
     文件         242  2014-04-11 12:44  完成版lz77程序\lz77.plg
     文件           0  2014-04-11 12:45  完成版lz77程序\压缩文件.txt
     文件           0  2014-04-11 12:45  完成版lz77程序\源文件.txt
     文件           0  2014-04-11 12:45  完成版lz77程序\解压文件.txt

评论

共有 条评论