⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 以前为研究加解密码算法,曾分析了LZ77算法,但觉得所研究的例子压缩文件大小存在限制,所以就着手改进了其算法,使其支持大文件压缩和解压.
💻 CPP
字号:
/*********************************************************************
*
*   Project description:
*       Lz77 compression/decompression algorithm.
*
*********************************************************************/


#include "Lz77.h"

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


int main(int argc, char *argv[])
{
   FILE    *fp=NULL;
   FILE    *fp1;
   ULONG   fsize;
   ULONG   ulNumberOfBits;
   ULONG   ulFileCompressedSize;
   ULONG   ulFileDecompressedSize;
   SYSTEMTIME      t1, t2;
   char szPath[MAX_PATH] = "";
   CLz77 Lz77;
//  char    s1[]="abcdabcdefgabcdefaffasda";
//  ULONG   a, b;
//  FindLongestSubstring((PUCHAR)s1, (PUCHAR)s1+11, 11,&a, &b );
//  return 0;
   if(argc <= 1)
	   return -1;
   fp = fopen(argv[1], "rb");
   if( !fp )
   {
       return -1;
   }

   fseek(fp, 0, SEEK_END);
   fsize = ftell(fp);
   fseek(fp, 0, SEEK_SET);

   fread(__buffer1__, 1, fsize, fp);


   GetSystemTime(&t1);
  // lz77compress(__buffer1__, fsize, __buffer2__, &ulNumberOfBits);
   Lz77.Compress(__buffer1__, fsize, __buffer2__, &ulNumberOfBits);
   //LZ77Compress(__buffer1__, fsize, __buffer2__, &ulNumberOfBits);
   GetSystemTime(&t2);
   ulFileCompressedSize = ((ulNumberOfBits+7)>>3);

   sprintf(szPath, "compress_%s", argv[1]);
   fp1=fopen(szPath, "wb+");
   if( !fp1 )
   {
       goto l1;
   }
   fwrite(__buffer2__, 1, ulFileCompressedSize, fp1);
   fclose(fp1);

   RtlZeroMemory(__buffer1__, sizeof(__buffer1__));

   Lz77.Decompress(__buffer2__, ulNumberOfBits, __buffer1__, &ulFileDecompressedSize);
   //lz77decompress(__buffer2__, ulNumberOfBits, __buffer1__, &ulFileDecompressedSize);
   //LZ77Decompress(__buffer2__, ulNumberOfBits, __buffer1__, &ulFileDecompressedSize);
   sprintf(szPath, "decompress_%s", argv[1]);
   fp1=fopen(szPath, "wb+");
   if( !fp1 )
   {
       goto l1;
   }
   fwrite(__buffer1__, 1, ulFileDecompressedSize, fp1);
   fclose(fp1);

l1:
   if( fp )
   {
       fclose(fp);
   }

   ULONG   milliS;

   milliS = ((t2.wHour - t1.wHour)*3600 + (t2.wMinute-t1.wMinute)*60 + (t2.wSecond-t1.wSecond)) * 1000 + (t2.wMilliseconds-t1.wMilliseconds);
   printf("Totally %ld milliseconds elapsed!\n\n", milliS);

   printf("Press any key to exit!\n");
   getch();

   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -