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

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

?? crc32dynamic.cpp

?? 這個工程實現了從給定文本中產生循環冗余碼的算法。循環冗余碼可用于完整的對比大量數據的一致性。
?? CPP
字號:
#include "stdafx.h"
#include "Crc32Dynamic.h"
#include <fstream.h>

//***********************************************
CCrc32Dynamic::CCrc32Dynamic() : m_pdwCrc32Table(NULL)
{
}

//***********************************************
CCrc32Dynamic::~CCrc32Dynamic()
{
	Free();
}

//***********************************************
void CCrc32Dynamic::Init(void)
{
	// This is the official polynomial used by CRC32 in PKZip.
	// Often times the polynomial shown reversed as 0x04C11DB7.
	DWORD dwPolynomial = 0xEDB88320;
	int i, j;

	Free();
	m_pdwCrc32Table = new DWORD[256];

	DWORD dwCrc;
	for(i = 0; i < 256; i++)
	{
		dwCrc = i;
		for(j = 8; j > 0; j--)
		{
			if(dwCrc & 1)
				dwCrc = (dwCrc >> 1) ^ dwPolynomial;
			else
				dwCrc >>= 1;
		}
		m_pdwCrc32Table[i] = dwCrc;
	}
}

//***********************************************
void CCrc32Dynamic::Free(void)
{
	delete m_pdwCrc32Table;
	m_pdwCrc32Table = NULL;
}

//***********************************************
inline void CCrc32Dynamic::CalcCrc32(const BYTE byte, DWORD &dwCrc32) const
{
	dwCrc32 = ((dwCrc32) >> 8) ^ m_pdwCrc32Table[(byte) ^ ((dwCrc32) & 0x000000FF)];
}

//***********************************************
bool CCrc32Dynamic::GetFileSizeQW(const HANDLE hFile, QWORD &qwSize)
{
	_ASSERTE(hFile != INVALID_HANDLE_VALUE);

	bool bSuccess = true;

	try
	{
		DWORD dwLo = 0, dwHi = 0;
		dwLo = GetFileSize(hFile, &dwHi);

		if(dwLo == INVALID_FILE_SIZE && GetLastError() != NO_ERROR)
		{
			bSuccess = false;
			qwSize = 0;
		}
		else
		{
			qwSize = MAKEQWORD(dwHi, dwLo);
		}
	}
	catch(...)
	{
		bSuccess = false;
	}

	return bSuccess;
}

//***********************************************
DWORD CCrc32Dynamic::StringCrc32(LPCTSTR szString, DWORD &dwCrc32) const
{
	_ASSERTE(szString);

	DWORD dwErrorCode = NO_ERROR;

	dwCrc32 = 0xFFFFFFFF;

	try
	{
		// Is the table initialized?
		if(m_pdwCrc32Table == NULL)
			throw 0;

		while(*szString != _T('\0'))
		{
			CalcCrc32((BYTE)*szString, dwCrc32);
			szString++;
		}
	}
	catch(...)
	{
		// An unknown exception happened, or the table isn't initialized
		dwErrorCode = ERROR_CRC;
	}

	dwCrc32 = ~dwCrc32;

	return dwErrorCode;
}

//***********************************************
DWORD CCrc32Dynamic::FileCrc32Streams(LPCTSTR szFilename, DWORD &dwCrc32) const
{
#if UNICODE || _UNICODE
	return ERROR_NOT_SUPPORTED;
#else
	_ASSERTE(szFilename);
	_ASSERTE(lstrlen(szFilename));

	DWORD dwErrorCode = NO_ERROR;
	ifstream file;

	dwCrc32 = 0xFFFFFFFF;

	try
	{
		// Is the table initialized?
		if(m_pdwCrc32Table == NULL)
			throw 0;

		// Open the file
		file.open(szFilename, ios::in | ios::nocreate | ios::binary, filebuf::sh_read);
		if(!file.is_open())
			dwErrorCode = file.fail();
		else
		{
			char buffer[MAX_BUFFER_SIZE];
			int nLoop, nCount;
			nCount = file.read(buffer, sizeof(buffer)).gcount();
			while(nCount)
			{
				for(nLoop = 0; nLoop < nCount; nLoop++)
					CalcCrc32(buffer[nLoop], dwCrc32);
				nCount = file.read(buffer, sizeof(buffer)).gcount();
			}

			file.close();
		}
	}
	catch(...)
	{
		// An unknown exception happened, or the table isn't initialized
		dwErrorCode = ERROR_CRC;
	}

	if(file.is_open()) file.close();

	dwCrc32 = ~dwCrc32;

	return dwErrorCode;
#endif
}

//***********************************************
DWORD CCrc32Dynamic::FileCrc32Win32(LPCTSTR szFilename, DWORD &dwCrc32) const
{
	_ASSERTE(szFilename);
	_ASSERTE(lstrlen(szFilename));

	DWORD dwErrorCode = NO_ERROR;
	HANDLE hFile = NULL;

	dwCrc32 = 0xFFFFFFFF;

	try
	{
		// Is the table initialized?
		if(m_pdwCrc32Table == NULL)
			throw 0;

		// Open the file
		hFile = CreateFile(szFilename,
			GENERIC_READ,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
		if(hFile == INVALID_HANDLE_VALUE)
			dwErrorCode = GetLastError();
		else
		{
			BYTE buffer[MAX_BUFFER_SIZE];
			DWORD dwBytesRead, dwLoop;
			BOOL bSuccess = ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL);
			while(bSuccess && dwBytesRead)
			{
				for(dwLoop = 0; dwLoop < dwBytesRead; dwLoop++)
					CalcCrc32(buffer[dwLoop], dwCrc32);
				bSuccess = ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL);
			}
		}
	}
	catch(...)
	{
		// An unknown exception happened, or the table isn't initialized
		dwErrorCode = ERROR_CRC;
	}

	if(hFile != NULL) CloseHandle(hFile);

	dwCrc32 = ~dwCrc32;

	return dwErrorCode;
}

//***********************************************
DWORD CCrc32Dynamic::FileCrc32Filemap(LPCTSTR szFilename, DWORD &dwCrc32) const
{
	_ASSERTE(szFilename);
	_ASSERTE(lstrlen(szFilename));

	DWORD dwErrorCode = NO_ERROR;
	HANDLE hFile = NULL, hFilemap = NULL;

	dwCrc32 = 0xFFFFFFFF;

	try
	{
		// Is the table initialized?
		if(m_pdwCrc32Table == NULL)
			throw 0;

		// Open the file
		hFile = CreateFile(szFilename,
			GENERIC_READ,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
		if(hFile == INVALID_HANDLE_VALUE)
			dwErrorCode = GetLastError();
		else
		{
			QWORD qwFileSize = 0, qwFileOffset = 0;
			DWORD dwByteCount, dwViewSize;
			DWORD dwBaseAddress;

			// Get the file size
			if(!GetFileSizeQW(hFile, qwFileSize))
				dwErrorCode = ERROR_BAD_LENGTH;
			else if(qwFileSize != 0)	// We cannot CRC zero byte files
			{
				// Create the file mapping
				hFilemap = CreateFileMapping(hFile,
					NULL,
					PAGE_READONLY,
					0,
					0,
					NULL);
				if(hFilemap == NULL)
					dwErrorCode = GetLastError();
				else
				{
					LPBYTE pByte;

					// Loop while we map a section of the file and CRC it
					while(qwFileSize > 0)
					{
						if(qwFileSize < MAX_VIEW_SIZE)
							dwViewSize = LODWORD(qwFileSize);
						else
							dwViewSize = MAX_VIEW_SIZE;

						dwBaseAddress = (DWORD)MapViewOfFile(hFilemap,
							FILE_MAP_READ,
							HIDWORD(qwFileOffset),
							LODWORD(qwFileOffset),
							dwViewSize);

						dwByteCount = dwViewSize;
						pByte = (LPBYTE)dwBaseAddress;
						while(dwByteCount-- > 0)
						{
							CalcCrc32(*pByte, dwCrc32);
							pByte++;
						}

						UnmapViewOfFile((LPVOID)dwBaseAddress);
						qwFileOffset += dwViewSize;
						qwFileSize -= dwViewSize;
					}
				}
			}
		}
	}
	catch(...)
	{
		// An unknown exception happened, or the table isn't initialized
		dwErrorCode = ERROR_CRC;
	}

	if(hFile != NULL) CloseHandle(hFile);
	if(hFilemap != NULL) CloseHandle(hFilemap);

	dwCrc32 = ~dwCrc32;

	return dwErrorCode;
}

//***********************************************
DWORD CCrc32Dynamic::FileCrc32Assembly(LPCTSTR szFilename, DWORD &dwCrc32) const
{
	_ASSERTE(szFilename);
	_ASSERTE(lstrlen(szFilename));

	DWORD dwErrorCode = NO_ERROR;
	HANDLE hFile = NULL;

	dwCrc32 = 0xFFFFFFFF;

	try
	{
		// Is the table initialized?
		if(m_pdwCrc32Table == NULL)
			throw 0;

		// Open the file
		hFile = CreateFile(szFilename,
			GENERIC_READ,
			FILE_SHARE_READ,
			NULL,
			OPEN_EXISTING,
			FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_SEQUENTIAL_SCAN,
			NULL);
		if(hFile == INVALID_HANDLE_VALUE)
			dwErrorCode = GetLastError();
		else
		{
			BYTE buffer[MAX_BUFFER_SIZE];
			DWORD dwBytesRead;
			BOOL bSuccess = ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL);
			while(bSuccess && dwBytesRead)
			{
				// Register use:
				//		eax - CRC32 value
				//		ebx - a lot of things
				//		ecx - CRC32 value
				//		edx - address of end of buffer
				//		esi - address of start of buffer
				//		edi - CRC32 table
				__asm
				{
					// Save the esi and edi registers
					push esi
					push edi

					mov eax, dwCrc32			// Load the pointer to dwCrc32
					mov ecx, [eax]				// Dereference the pointer to load dwCrc32

					mov ebx, this				// Load the CRC32 table
					mov edi, [ebx]CCrc32Dynamic.m_pdwCrc32Table

					lea esi, buffer				// Load buffer
					mov ebx, dwBytesRead		// Load dwBytesRead
					lea edx, [esi + ebx]		// Calculate the end of the buffer

				crc32loop:
					xor eax, eax				// Clear the eax register
					mov bl, byte ptr [esi]		// Load the current source byte
					
					mov al, cl					// Copy crc value into eax
					inc esi						// Advance the source pointer

					xor al, bl					// Create the index into the CRC32 table
					shr ecx, 8

					mov ebx, [edi + eax * 4]	// Get the value out of the table
					xor ecx, ebx				// xor with the current byte

					cmp edx, esi				// Have we reached the end of the buffer?
					jne crc32loop

					// Restore the edi and esi registers
					pop edi
					pop esi

					mov eax, dwCrc32			// Load the pointer to dwCrc32
					mov [eax], ecx				// Write the result
				}
				bSuccess = ReadFile(hFile, buffer, sizeof(buffer), &dwBytesRead, NULL);
			}
		}
	}
	catch(...)
	{
		// An unknown exception happened, or the table isn't initialized
		dwErrorCode = ERROR_CRC;
	}

	if(hFile != NULL) CloseHandle(hFile);

	dwCrc32 = ~dwCrc32;

	return dwErrorCode;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色老汉av一区二区三区| 久久久久久久久久电影| 在线国产亚洲欧美| 99re成人在线| 不卡在线观看av| 91在线小视频| 91丝袜高跟美女视频| 91热门视频在线观看| 色综合欧美在线| 在线精品视频小说1| 欧美在线综合视频| 在线播放亚洲一区| 欧美成人猛片aaaaaaa| 精品入口麻豆88视频| 久久只精品国产| 国产精品天美传媒沈樵| 亚洲欧美电影一区二区| 一个色妞综合视频在线观看| 午夜精品123| 久久激情五月激情| 风间由美一区二区av101| gogo大胆日本视频一区| 色88888久久久久久影院按摩| 欧美午夜片在线观看| 91精品国产乱码久久蜜臀| 精品免费一区二区三区| 欧美高清一级片在线观看| 综合激情成人伊人| 亚洲妇熟xx妇色黄| 久久国产精品72免费观看| 国产一区二区精品久久| 99re8在线精品视频免费播放| 欧美日韩精品福利| 久久亚洲一级片| 亚洲另类春色国产| 日本成人在线网站| 成人精品一区二区三区四区| 在线一区二区三区做爰视频网站| 欧美日韩国产首页| 久久嫩草精品久久久精品| 亚洲视频在线一区观看| 日韩国产在线一| 成人免费毛片片v| 欧美人xxxx| 国产免费观看久久| 无码av中文一区二区三区桃花岛| 国产成人高清在线| 欧美色网站导航| 久久精品人人做人人爽人人| 亚洲国产综合色| 高清国产一区二区| 欧美精品一卡二卡| 日韩一区中文字幕| 紧缚奴在线一区二区三区| 91免费在线看| 久久久久国产精品人| 亚洲bt欧美bt精品| 国产91精品露脸国语对白| 欧美猛男男办公室激情| 国产精品久久久久三级| 欧美bbbbb| 色哟哟在线观看一区二区三区| 欧美不卡一区二区三区四区| 亚洲一区二区三区在线播放| 福利电影一区二区| 精品日产卡一卡二卡麻豆| 亚洲成年人网站在线观看| av一本久道久久综合久久鬼色| 精品嫩草影院久久| 日韩高清中文字幕一区| 色婷婷狠狠综合| 欧美高清在线一区| 国产一区欧美一区| 欧美成人乱码一区二区三区| 婷婷久久综合九色国产成人| 一本色道综合亚洲| 国产精品久久久久久妇女6080| 精品一区二区在线播放| 欧美日韩激情一区二区| 亚洲啪啪综合av一区二区三区| 国产精品一区二区三区四区| 日韩一区二区三免费高清| 亚洲国产色一区| 色综合色综合色综合| 中文字幕在线观看不卡| 高清日韩电视剧大全免费| 亚洲精品一区二区三区蜜桃下载 | 午夜欧美视频在线观看 | 国产免费成人在线视频| 狠狠色丁香婷婷综合久久片| 91 com成人网| 午夜精品福利一区二区三区蜜桃| 欧美无乱码久久久免费午夜一区| 亚洲欧美在线高清| 91在线丨porny丨国产| 亚洲人快播电影网| 91久久精品一区二区三| 亚洲男人电影天堂| 91福利小视频| 亚洲va韩国va欧美va精品| 欧美视频中文字幕| 亚洲国产毛片aaaaa无费看 | 欧美一级日韩不卡播放免费| 天天综合网天天综合色| 欧美人妇做爰xxxⅹ性高电影| 亚洲国产aⅴ天堂久久| 欧美乱妇15p| 蜜桃视频在线一区| 精品日产卡一卡二卡麻豆| 国产一区二区电影| 国产精品三级av在线播放| 不卡一卡二卡三乱码免费网站| 成人免费小视频| 91精品1区2区| 日韩和的一区二区| 欧美精品一区二区精品网| 国产老妇另类xxxxx| 欧美高清在线视频| 在线视频一区二区三区| 亚欧色一区w666天堂| 日韩三级视频在线观看| 国产一区二区中文字幕| 欧美韩国日本一区| 色综合久久天天| 日本麻豆一区二区三区视频| 久久久久久久久久久99999| 本田岬高潮一区二区三区| 亚洲精品国产成人久久av盗摄 | 中文字幕色av一区二区三区| 色婷婷综合激情| 青青草国产精品97视觉盛宴 | 午夜精品久久久久影视| 日韩欧美久久久| 风间由美一区二区三区在线观看| 亚洲精品老司机| 91精品国产麻豆| 不卡的看片网站| 亚洲观看高清完整版在线观看 | 美女在线观看视频一区二区| 久久久久久久久久美女| 91在线你懂得| 麻豆精品在线观看| 国产精品初高中害羞小美女文| 欧美日韩国产在线观看| 国产麻豆视频精品| 一区二区久久久久久| 日韩精品一区二区三区在线 | 国产精品久久福利| 欧美日韩一二三| 国产成人久久精品77777最新版本| 亚洲乱码中文字幕| 日韩精品一区二区三区中文精品 | 国产精品狼人久久影院观看方式| 欧美在线免费观看视频| 国产精品一区二区三区四区| 亚洲午夜视频在线| 国产亚洲欧美日韩在线一区| 欧美日韩在线播放三区四区| 国产精品一区专区| 亚洲成人你懂的| 国产精品欧美久久久久无广告| 91麻豆精品国产91久久久更新时间| 国产成人av福利| 日韩avvvv在线播放| 亚洲欧洲制服丝袜| 国产日韩在线不卡| 日韩欧美一区二区免费| 色噜噜狠狠色综合中国| 国产成人精品影视| 美腿丝袜一区二区三区| 夜夜精品浪潮av一区二区三区| 久久久久9999亚洲精品| 欧美久久高跟鞋激| 在线影院国内精品| 99久久伊人久久99| 国产精品一区二区久激情瑜伽 | 欧美人牲a欧美精品| 91免费在线视频观看| 懂色av中文字幕一区二区三区| 奇米色777欧美一区二区| 亚洲国产欧美在线人成| 亚洲欧美日韩一区| 国产精品成人在线观看| 国产女主播视频一区二区| 欧美大肚乱孕交hd孕妇| 91精品国产综合久久香蕉麻豆 | 亚洲视频1区2区| 日本一区二区高清| 久久午夜电影网| 日韩欧美国产成人一区二区| 欧美高清性hdvideosex| 欧美四级电影网| 91久久精品午夜一区二区| 一本色道久久综合狠狠躁的推荐| 成人一级黄色片| 成人夜色视频网站在线观看| 国产精品综合久久| 国产高清久久久久| 久久97超碰国产精品超碰| 美女视频黄a大片欧美|