• 大小: 3.72MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-10
  • 语言: 其他
  • 标签: LZW  数据压缩  

资源简介

LZW完整压缩/解压缩算法,可以直接对文件操作!VS2013编译通过!

资源截图

代码片段和文件信息

#include “Compress.h“
compress::compress(string _infile string _outfile)
{
infile.open(_infile ifstream::binary);
outfile.open(_outfile ifstream::binary);
InBuffer_dex = InBuffer_Maxdex = BufferSize;
InBuffer = (UCHAR *)(new char[BufferSize]);  //读文件缓冲
OutBuffer = (UCHAR *)(new char[BufferSize]); //写文件缓冲
tempcode = EMPTY;
OutBuffer_dex = 0;
Count = 0;
_con = 0;
table = new TABLE[4096];  //字典初始化
}
compress::~compress()
{
infile.close();
outfile.close();
delete[] InBuffer;
delete[] OutBuffer;
delete[] table;
}
bool compress::CheckFile()
{
if (!infile.is_open() || !outfile.is_open())
{
cout << “Files can‘t be opened!!“ << endl;
return false;
}
return true;
}
void compress::Intial()//重置字典数据
{   
for (UINT i = 0; i < 4096; i++)
{
if (i <=END)
{
table[i].code = i;
table[i].used = true;
}
else
{
table[i].precode = EMPTY;
table[i].code = EMPTY;
table[i].used = false;
}
}

}
UINT compress::CheckTable(UINT pre_codeUINT code)//查字典
{
for (UINT i = END+1; i < 4096; i++)
{
if (table[i].used == true)
{
if (table[i].precode == pre_code && table[i].code == code)
return i;
}
else   //加入到字典中
{   
if (i >= 4095)
{
_con++;
return NEW_TABLE;
}
else
{
table[i].precode = pre_code;
table[i].code = code;
table[i].used = true;
return EMPTY;
}
}
}
return EMPTY;
}
UCHAR compress::ReadChar()  //读取8位数据
{
Count++;
if (Count % 10000 == 0)
{
cout << ‘.‘;
if (Count %100000==0)
{
cout << endl;
Count = 0;
}
}
if (InBuffer_dex >= BufferSize || InBuffer_dex >= InBuffer_Maxdex)
{
infile.read((char *)InBuffer BufferSize);
InBuffer_Maxdex = (unsigned int)infile.gcount();
InBuffer_dex = 0;
}
return InBuffer[InBuffer_dex++];
}
bool compress::WriteChar(UINT code)
{
if ( tempcode == EMPTY)
{
OutBuffer[OutBuffer_dex++] = code & 0xff;  //写入低8位
tempcode = (code >> 4) & 0xF0;
}
else
{
OutBuffer[OutBuffer_dex++] = code & 0xff;
OutBuffer[OutBuffer_dex++] = (tempcode | ((code >> 8) & 0xf))&0xff;
tempcode = EMPTY;
}
if (OutBuffer_dex >= BufferSize)
{
outfile.write((char *)OutBuffer OutBuffer_dex );
OutBuffer_dex = 0;
}
return true;
}
bool compress::CheckEOF()   //检测文件结束
{
if ( infile.eof() && InBuffer_dex >= InBuffer_Maxdex)
return true;
else
return false;
}
void compress::WriteEnd()  //写最后的若干字节
{
if (tempcode != EMPTY)
{
WriteChar(END);
}
else
{
WriteChar(END);
WriteChar(END);
}
if (OutBuffer_dex != 0)
outfile.write((char *)OutBuffer OutBuffer_dex );
cout << “Compressed file has been created !“ << endl;
cout << “The number of table is  “<<_con <}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-12-20 14:48  LZW压缩算法\
     目录           0  2015-12-20 14:48  LZW压缩算法\LZW\
     目录           0  2015-12-20 14:48  LZW压缩算法\LZW\Debug\
     文件      102912  2015-12-20 14:39  LZW压缩算法\LZW\Debug\compress.exe
     文件     1281376  2015-12-20 14:39  LZW压缩算法\LZW\Debug\compress.ilk
     文件     1454080  2015-12-20 14:39  LZW压缩算法\LZW\Debug\compress.pdb
     文件      100864  2015-12-20 14:40  LZW压缩算法\LZW\Debug\decompress.exe
     文件      949536  2015-12-20 14:40  LZW压缩算法\LZW\Debug\decompress.ilk
     文件     1372160  2015-12-20 14:40  LZW压缩算法\LZW\Debug\decompress.pdb
     文件     8257536  2015-12-20 14:41  LZW压缩算法\LZW\LZW.sdf
     文件        1439  2015-12-17 16:43  LZW压缩算法\LZW\LZW.sln
     文件       44544  2015-12-20 14:41  LZW压缩算法\LZW\LZW.v12.suo
     目录           0  2015-12-20 14:48  LZW压缩算法\LZW\compress\
     文件        2842  2015-12-20 14:37  LZW压缩算法\LZW\compress\Compress.cpp
     文件         991  2015-12-20 14:39  LZW压缩算法\LZW\compress\Compress.h
     目录           0  2015-12-20 14:48  LZW压缩算法\LZW\compress\Debug\
     文件      276314  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\Compress.obj
     文件         593  2015-12-14 19:50  LZW压缩算法\LZW\compress\Debug\compress.Build.CppClean.log
     文件        1399  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.log
     目录           0  2015-12-20 14:48  LZW压缩算法\LZW\compress\Debug\compress.tlog\
     文件       22754  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\CL.read.1.tlog
     文件        1010  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\CL.write.1.tlog
     文件        1118  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\cl.command.1.tlog
     文件         144  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\compress.lastbuildstate
     文件        1068  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\link.command.1.tlog
     文件        2446  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\link.read.1.tlog
     文件         340  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\compress.tlog\link.write.1.tlog
     文件      138920  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\main.obj
     文件      355328  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\vc120.idb
     文件      356352  2015-12-20 14:39  LZW压缩算法\LZW\compress\Debug\vc120.pdb
     文件        4198  2015-12-13 15:55  LZW压缩算法\LZW\compress\compress.vcxproj
............此处省略23个文件信息

评论

共有 条评论