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

📄 crc32.cpp

📁 CRC32算法, 可以对字符串或文件进行CRC32计算, 带进度条.内含VC++6.0源码
💻 CPP
字号:

/*
	Copyright 2006 - 2008, All Rights Reserved.

	CRC32算法实现

	作者	- 张鲁夺(zhangluduo)
	MSN		- zhangluduo@msn.com
	QQ群	- 34064264

	为所有爱我的人和我爱的人努力!
*/

#include "stdafx.h"
#include "CRC32.h"

CRC32::CRC32()
{
	// init CRC-32 table
    // This is the official polynomial used by CRC-32
    unsigned long ulPolynomial = 0x04C11DB7;

    // 256 values representing ASCII character codes.
    for (int i = 0; i <= 0xFF; i++)
    {
        m_Table[i] = Reflect(i, 8) << 24;
        for (int j = 0; j < 8; j++)
            m_Table[i] = (m_Table[i] << 1) ^ (m_Table[i] & (1 << 31) ? ulPolynomial : 0);
        m_Table[i] = Reflect(m_Table[i], 32);
    }
}

CRC32::~CRC32()
{

}

unsigned long CRC32::Reflect(unsigned long ref, char ch)
{
    unsigned long value = 0;

    // Swap bit 0 for bit 7, bit 1 for bit 6, etc.
    for(int i = 1; i < (ch + 1); i++)
    {
        if (ref & 1)
            value |= 1 << (ch - i);
        ref >>= 1;
    }
    return value;
}

void CRC32::CRCUpdate(unsigned char* buffer, unsigned long size, unsigned long &Result)
{
    while (size--)
        Result = (Result >> 8) ^ m_Table[(Result & 0xFF) ^ *buffer++];
}

void CRC32::CRCInit(unsigned long &Result)
{
	Result = 0xFFFFFFFF;
}
void CRC32::CRCFinal(unsigned long &Result)
{
	Result ^= 0xFFFFFFFF;
}

⌨️ 快捷键说明

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