亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lz77.cpp

?? 在Lz77的基礎上修改
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	return true;
}



/////////////////////////////////////////////
// 壓縮一段字節流
// src - 源數據區
// srclen - 源數據區字節長度
// dest - 壓縮數據區,調用前分配srclen+5字節內存
// 返回值 > 0 壓縮數據長度
// 返回值 = 0 數據無法壓縮
// 返回值 < 0 壓縮中異常錯誤
int CCompressLZ77::Compress(BYTE* src, int srclen, BYTE* dest)
{
	int i;
	CurByte = 0; CurBit = 0;	
	int off, len;

	if (srclen > 65536) 
		return -1;

	pWnd = src;
	_InitSortTable();
	for (i = 0; i < srclen; i++)
	{		
		if (CurByte >= srclen)
			return 0;
		if (_SeekPhase(src, srclen, i, &off, &len))
		{			
			// 輸出匹配術語 flag(1bit) + len(γ編碼) + offset(最大16bit)
			_OutCode(dest, 1, 1, FALSE);
			_OutCode(dest, len, 0, TRUE);

			// 在窗口不滿64k大小時,不需要16位存儲偏移
			_OutCode(dest, off, UpperLog2(nWndSize), FALSE);
						
			_ScrollWindow(len);
			i += len - 1;
		}
		else
		{
			// 輸出單個非匹配字符 0(1bit) + char(8bit)
			_OutCode(dest, 0, 1, FALSE);
			_OutCode(dest, (DWORD)(src[i]), 8, FALSE);
			_ScrollWindow(1);
		}
	}
	int destlen = CurByte + ((CurBit) ? 1 : 0);
	if (destlen >= srclen)
		return 0;
	return destlen;
}

bool CCompressLZ77::DecompressFile(char* zipFile, char* unZipFile)
{
    WORD flag1, flag2;
	BYTE soubuf[65536];
	BYTE destbuf[65536 + 16];
	FILE* in = fopen(zipFile, "rb");
	FILE* out = out = fopen(unZipFile, "wb");
	if (out == NULL)
	{
		fclose(in);
		return false;
	}
	fseek(in, 0, SEEK_END);
	long soulen = ftell(in);
	fseek(in, 0, SEEK_SET);
	int last = soulen, act;
	while (last > 0)
	{
		fread(&flag1, sizeof(WORD), 1, in);
		fread(&flag2, sizeof(WORD), 1, in);
		last -= 2 * sizeof(WORD);
		if (flag1 == 0)
			act = 65536;
		else
			act = flag1;
		last-= flag2 ? (flag2) : act;

		if (flag2 == flag1)
		{
			fread(soubuf, act, 1, in);				
		}
		else
		{
			fread(destbuf, flag2, 1, in);
			if (!Decompress((BYTE*)soubuf, act, (BYTE*)destbuf))
			{
				fclose(in);
				fclose(out);
				return -1;
			}
		}
		fwrite((BYTE*)soubuf, act, 1, out);				
	}
	fclose(in);
	fclose(out);
	return TRUE;
}
/////////////////////////////////////////////
// 解壓縮一段字節流
// src - 接收原始數據的內存區
// srclen - 源數據區字節長度
// dest - 壓縮數據區
// 返回值 - 成功與否
BOOL CCompressLZ77::Decompress(BYTE* src, int srclen, BYTE* dest)
{
	int i;
	CurByte = 0; CurBit = 0;
	pWnd = src;		// 初始化窗口
	nWndSize = 0;

	if (srclen > 65536) 
		return FALSE;
	
	for (i = 0; i < srclen; i++)
	{		
		BYTE b = GetBit(dest[CurByte], CurBit);
		MovePos(&CurByte, &CurBit, 1);
		if (b == 0) // 單個字符
		{
			CopyBits(src + i, 0, dest + CurByte, CurBit, 8);
			MovePos(&CurByte, &CurBit, 8);
			nWndSize++;
		}
		else		// 窗口內的術語
		{
			int q = -1;
			while (b != 0)
			{
				q++;
				b = GetBit(dest[CurByte], CurBit);
				MovePos(&CurByte, &CurBit, 1);				
			}
			int len, off;
			DWORD dw = 0;
			BYTE* pb;
			if (q > 0)
			{				
				pb = (BYTE*)&dw;
				CopyBits(pb + (32 - q) / 8, (32 - q) % 8, dest + CurByte, CurBit, q);
				MovePos(&CurByte, &CurBit, q);
				InvertDWord(&dw);
				len = 1;
				len <<= q;
				len += dw;
				len += 1;
			}
			else
				len = 2;

			// 在窗口不滿64k大小時,不需要16位存儲偏移
			dw = 0;
			pb = (BYTE*)&dw;
			int bits = UpperLog2(nWndSize);
			CopyBits(pb + (32 - bits) / 8, (32 - bits) % 8, dest + CurByte, CurBit, bits);
			MovePos(&CurByte, &CurBit, bits);
			InvertDWord(&dw);
			off = (int)dw;
			// 輸出術語
			for (int j = 0; j < len; j++)
			{
				_ASSERT(i + j <  srclen);
				_ASSERT(off + j <  _MAX_WINDOW_SIZE);
				
				src[i + j] = pWnd[off + j];
			}
			nWndSize += len;
			i += len - 1;
		}
		// 滑動窗口
		if (nWndSize > _MAX_WINDOW_SIZE)
		{
			pWnd += nWndSize - _MAX_WINDOW_SIZE;
			nWndSize = _MAX_WINDOW_SIZE;			
		}
	}

	return TRUE;
}

BOOL CCompressLZ77::CompressDir(char* srcDir, char* zipFile, bool includeSub)
{
    WIN32_FIND_DATA FindFileData;
	HANDLE	hFind;
	BOOL	bFinished = FALSE;
	BOOL	ret = FALSE;
	char	tempFileFind[200];
	DWORD	nBytesToRead,nBytesRead, nBytesWrited;
	sprintf(tempFileFind,"%s\\*.*", srcDir); 
	hFind = FindFirstFile(tempFileFind, &FindFileData);
	if (hFind == INVALID_HANDLE_VALUE) 
	{
		printf ("Invalid File Handle. GetLastError reports %d\n", GetLastError ());
		return FALSE;
	} 	
	while (!bFinished)
	{		
		//如果不是.和..
		if(strcmp(FindFileData.cFileName, ".")!=0 && strcmp(FindFileData.cFileName,"..")!=0)
		{
			//如果是目錄
			if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			{
				if (includeSub)
				{
					char tempDir[MAX_PATH];
					char tempArch[MAX_PATH];
					sprintf(tempDir,"%s\\%s", srcDir, FindFileData.cFileName);
					sprintf(tempArch,"%s\\%s.archd", srcDir, FindFileData.cFileName);
					if(!CompressDir(tempDir,tempArch))
						return FALSE;
					BYTE	buffer[MAX_BUF];
					char	tempFile[MAX_PATH];
					DWORD	iFileSize;
					DWORD	iFileNameSize;
					sprintf(tempFile,"%s\\%s", srcDir, FindFileData.cFileName); 			
					//將文件寫入打包文件arch中,首先為文件長度   4+文件名長度+文件長度+字節
					HANDLE destHanle = ::CreateFile(zipFile, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
					//ftDst.OpenFile(zipFile);
					HANDLE srcHanle = ::CreateFile(tempArch, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
					::SetFilePointer(destHanle, 0, NULL, FILE_END);
					sprintf(tempFile,"%s.archd", FindFileData.cFileName);
					iFileSize = GetFileSize(srcHanle, NULL);
					iFileNameSize = strlen(tempFile);
					//    4B			4B				文件名		文件內容
					//    文件名長度	文件內容長度    相對路徑
					WriteFile(destHanle, (char *)&iFileNameSize, 4, &nBytesWrited, NULL);
					WriteFile(destHanle, (char *)&iFileSize, 4, &nBytesWrited, NULL);
					WriteFile(destHanle, tempFile, iFileNameSize, &nBytesWrited, NULL);
					do
					{
						ret = ReadFile(srcHanle, buffer, 512, &nBytesRead, NULL) ; 
						// Check for end of file. 
						if (ret &&  (nBytesRead == 0) ) 
						{ 
							break;
						}	
						ret = ::WriteFile(destHanle,buffer,nBytesRead,&nBytesToRead,NULL);		
						if(!ret)
						{
							return FALSE;
						}
					}while(TRUE);	
					CloseHandle(srcHanle);
					CloseHandle(destHanle);
					//刪除生成的臨時文件*.archd
					DeleteFile(tempArch);
				}
			}
			//如果是文件則首先壓縮文件,然后在寫入到目標文件中
			else 
			{					
				if(strstr(FindFileData.cFileName, ".archd"))
				{
					
				}
				else
				{
					BYTE	buffer[MAX_BUF];
					char	tempFileCompressName[MAX_PATH];
					char	tempFile[MAX_PATH];
					DWORD	iFileSize;
					DWORD	iFileNameSize;						
					sprintf(tempFile,"%s\\%s", srcDir, FindFileData.cFileName); 
					GetCompressFileName(tempFileCompressName, tempFile);
					//壓縮文件 tempFileCompressName
					CompressFile(tempFile, tempFileCompressName);				
					//將文件寫入打包文件arch中,首先為文件長度   4+文件名長度+文件長度+字節
					HANDLE destHanle = ::CreateFile(zipFile, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
					//ftDst.OpenFile(zipFile);
					HANDLE srcHanle = ::CreateFile(tempFileCompressName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
					
					::SetFilePointer(destHanle, 0, NULL, FILE_END);
					iFileSize = GetFileSize(srcHanle, NULL);
					iFileNameSize = strlen(FindFileData.cFileName);
					//    4B			4B				文件名		文件內容
					//    文件名長度	文件內容長度    相對路徑
				    WriteFile(destHanle, (char *)&iFileNameSize, 4, &nBytesWrited, NULL);
					WriteFile(destHanle, (char *)&iFileSize, 4, &nBytesWrited, NULL);
					WriteFile(destHanle, FindFileData.cFileName, iFileNameSize, &nBytesWrited, NULL);
					do
					{
						ret = ReadFile(srcHanle, buffer, 512, &nBytesRead, NULL) ; 
						// Check for end of file. 
						if (ret &&  (nBytesRead == 0) ) 
						{ 
							break;
						}	
						ret = ::WriteFile(destHanle,buffer,nBytesRead,&nBytesToRead,NULL);		
						if(!ret)
						{
							return FALSE;
						}
					}while(TRUE);	
					CloseHandle(srcHanle);
					CloseHandle(destHanle);
					//刪除生成的臨時文件*.liz
					DeleteFile(tempFileCompressName);	

				}				
			}
		}
		//查找下一個文件
		if (!FindNextFile (hFind, &FindFileData))
		{
			bFinished = TRUE;
			if (GetLastError () == ERROR_NO_MORE_FILES)
			{
				//printf(TEXT("Found all of the files."));
			}
			else
			{
				printf(TEXT("Unable to find next file."));
			}
		}
	}
	// Close the search handle.
	
	if (!FindClose (hFind))
	{
		printf(TEXT("Unable to close search handle."));
	}
	return TRUE;
}

BOOL CCompressLZ77::DeCompressDir(char* zipFile, char* destDir)
{
    char szUnArchDir[MAX_PATH];	
	DWORD	nBytesRead, nBytesWrited;
	BOOL ret;
	if(destDir == NULL)
	{
		strcpy(szUnArchDir, zipFile);
		char *p = szUnArchDir;
		p = strstr(szUnArchDir, ".");
		*p = 0;
	}
	CreateDirectory(destDir, NULL);	
	HANDLE srcHandle = ::CreateFile(zipFile, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
	unsigned long iFileDataSize;
	unsigned long iFileNameSize;
	
	do 
	{
		ret = ReadFile(srcHandle, &iFileNameSize, 4, &nBytesRead, NULL); 
		// Check for end of file. 
		if (ret &&  (nBytesRead == 0) ) 
		{ 
			break;
		}	
		ret = ReadFile(srcHandle, &iFileDataSize, 4, &nBytesRead, NULL); 
		// Check for end of file. 
		if (ret &&  (nBytesRead == 0) ) 
		{ 
			break;
		}	
		char *FileName = new char[iFileNameSize+1];
		char *FileData = new char[iFileDataSize+1];
		//文件名
		ret = ReadFile(srcHandle, FileName, iFileNameSize, &nBytesRead, NULL); 
		// Check for end of file. 
		if (ret &&  (nBytesRead == 0) ) 
		{ 
			break;
		}
		FileName[iFileNameSize] = 0;
		//文件數據
		ret = ReadFile(srcHandle, FileData, iFileDataSize, &nBytesRead, NULL); 
		// Check for end of file. 
		if (ret &&  (nBytesRead == 0) ) 
		{ 
			break;
		}
		FileData[iFileDataSize] = 0;
		if(strstr(FileName, ".archd"))
		{
			char TempFileName[MAX_PATH];
			char TempDirName[MAX_PATH];
			char *p;
			sprintf(TempFileName, "%s\\%s", destDir, FileName);
			sprintf(TempDirName, "%s\\%s", destDir, FileName);

			//去掉文件的后綴名
			p = strstr(TempDirName, ".");
			*p =0;
			HANDLE destHandle = ::CreateFile(TempFileName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
			WriteFile(destHandle, FileData, iFileDataSize, &nBytesWrited,NULL);			
			CloseHandle(destHandle);
			//CreateDirectory(TempDirName, NULL);
//			if(!CreateDirectory(TempDirName, NULL))
//			{	
//				printf("創建文件夾%s失敗\n", dir);
//			}
			DeCompressDir(TempFileName, TempDirName);
			DeleteFile(TempFileName);
		}
		else
		{
			char TempFileName[MAX_PATH];
			char TempFileComName[MAX_PATH];
			sprintf(TempFileName, "%s\\%s", destDir, FileName);
			GetCompressFileName(TempFileComName, TempFileName);
			
			HANDLE destHandle = ::CreateFile(TempFileComName, GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
			WriteFile(destHandle, FileData, iFileDataSize, &nBytesWrited,NULL);			
			CloseHandle(destHandle);
			DecompressFile(TempFileComName, TempFileName);			
			DeleteFile(TempFileComName);
		}
		delete [] FileName;
		delete [] FileData;
	} while(TRUE);
	CloseHandle(srcHandle);
	return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区三区| 91精品国产91综合久久蜜臀| 色综合天天综合色综合av| 99久久综合精品| 欧美在线免费观看视频| 26uuu另类欧美亚洲曰本| 国产精品美女久久久久久久久 | 亚洲综合一区二区| 日本欧美加勒比视频| 成人性视频免费网站| 色婷婷综合久久久中文一区二区 | 亚洲激情欧美激情| 天天影视色香欲综合网老头| 粉嫩久久99精品久久久久久夜| 欧美视频一区二区三区| 国产精品久久久久久久蜜臀| 午夜精品久久久久久久久久久 | 香蕉成人伊视频在线观看| 国产很黄免费观看久久| 欧美色老头old∨ideo| 中国av一区二区三区| 日韩av在线播放中文字幕| 成人午夜碰碰视频| 欧美精品一区二区久久久| 亚洲va欧美va天堂v国产综合| 丰满放荡岳乱妇91ww| 欧美一级片免费看| 夜夜嗨av一区二区三区四季av| 国产91丝袜在线播放0| 欧美v日韩v国产v| 日产国产欧美视频一区精品 | 欧美亚洲日本国产| 国产欧美一区二区三区鸳鸯浴| 青青国产91久久久久久| 欧美人与性动xxxx| 又紧又大又爽精品一区二区| 国产.欧美.日韩| 久久亚洲一级片| 精品一二三四区| 欧美刺激午夜性久久久久久久| 亚洲综合丝袜美腿| 欧美亚洲综合网| 一区二区三区毛片| 在线视频观看一区| 亚洲男同1069视频| 在线视频欧美精品| 亚洲午夜电影网| 欧美在线观看视频一区二区| 亚洲精品午夜久久久| 色婷婷久久综合| 欧美韩国日本一区| 懂色中文一区二区在线播放| 国产亚洲综合av| 不卡的av中国片| 亚洲桃色在线一区| 欧美自拍偷拍午夜视频| 亚洲成av人影院| 欧美一区二区三区在线| 亚洲综合视频网| 制服丝袜亚洲播放| 精品一二三四区| 国产精品久久毛片| 丁香一区二区三区| 国产精品每日更新在线播放网址| www.亚洲色图.com| 亚洲午夜av在线| 欧美va亚洲va香蕉在线| 国产成人精品影院| 亚洲人精品一区| 欧美情侣在线播放| 国产一区不卡在线| 亚洲天堂av老司机| 欧美精品一卡二卡| 精品一区二区三区在线播放 | 日产国产高清一区二区三区| 欧美日韩在线播放三区| 久久成人免费电影| 国产精品色哟哟网站| 欧美日韩在线三区| 暴力调教一区二区三区| 久久精品久久久精品美女| 亚洲免费成人av| 国产日本一区二区| 日韩精品最新网址| 欧美日韩视频第一区| 成人不卡免费av| 国产一区二区调教| 日韩高清在线电影| 亚洲欧美国产毛片在线| 久久亚洲捆绑美女| 日韩一区二区三区电影| 在线观看免费亚洲| 成人av网在线| 从欧美一区二区三区| 秋霞国产午夜精品免费视频| 亚洲在线视频网站| 亚洲天堂av老司机| 亚洲人成网站精品片在线观看| 国产欧美综合色| 久久亚洲一区二区三区明星换脸 | 欧美激情在线免费观看| 欧美变态口味重另类| 91精品国产麻豆| 91福利视频网站| 一本久道久久综合中文字幕| 成人黄色网址在线观看| 成人晚上爱看视频| 丰满少妇在线播放bd日韩电影| 国产一区二区精品久久99| 国产一区亚洲一区| 国产精品一区二区91| 蜜臀91精品一区二区三区| 日一区二区三区| 亚洲午夜激情av| 日韩国产欧美视频| 日韩高清中文字幕一区| 蜜臀a∨国产成人精品| 精品一区二区在线视频| 韩国女主播一区| 国产盗摄一区二区| av在线一区二区三区| 91在线视频免费91| 91女人视频在线观看| 欧美性猛交xxxx乱大交退制版| 欧美综合久久久| 91精品国产福利| 久久色在线观看| 国产精品三级视频| 国产精品青草久久| 亚洲少妇中出一区| 亚洲日本va在线观看| 一区二区三区免费网站| 视频一区欧美精品| 国产尤物一区二区在线| 麻豆成人综合网| 91福利资源站| 亚洲乱码国产乱码精品精的特点 | 久久婷婷色综合| 欧美精品粉嫩高潮一区二区| 大美女一区二区三区| 99国产精品视频免费观看| 成人美女在线视频| 久久婷婷国产综合精品青草 | 久久精品日产第一区二区三区高清版 | 欧美r级在线观看| 3d动漫精品啪啪1区2区免费| 欧美大尺度电影在线| 精品免费国产二区三区| 国产欧美精品一区二区色综合 | 99re成人精品视频| 在线观看亚洲精品| 91麻豆精品国产91久久久使用方法 | 欧美亚洲一区三区| 91麻豆精品国产| 久久久国产精品不卡| 有坂深雪av一区二区精品| 麻豆精品视频在线| 色婷婷综合久久久久中文一区二区| 欧美岛国在线观看| 亚洲免费av观看| 久久国产福利国产秒拍| 91免费精品国自产拍在线不卡| 在线综合+亚洲+欧美中文字幕| 国产精品天美传媒| 亚洲精品一区二区三区香蕉| 亚洲国产va精品久久久不卡综合| 国产精品自产自拍| 91久久国产最好的精华液| 国产一区二区在线视频| 免费看黄色91| 亚洲欧洲日韩在线| 精品国产伦一区二区三区观看方式| 一区二区三区在线视频观看58| 国产精品一二三四| 日韩一卡二卡三卡国产欧美| 一区二区激情小说| 成人aaaa免费全部观看| 精品国产免费一区二区三区香蕉 | 久久国产精品99精品国产| 日本韩国一区二区| 9i看片成人免费高清| 久久久精品欧美丰满| 久久精品国产在热久久| 日韩欧美一二三四区| 麻豆精品一二三| 亚洲欧洲日产国码二区| 国产大片一区二区| 1024成人网| 在线观看一区二区视频| 高清在线成人网| 亚洲欧美电影一区二区| 日日夜夜精品视频免费| 成人白浆超碰人人人人| 91精品国产综合久久精品app| 久久综合久久99| 五月激情综合色| 色综合夜色一区| 精品国产区一区| 日本视频中文字幕一区二区三区| 日本欧美肥老太交大片|