int CCRC32TestDlg::getCRC32(CString data)
{
CString strData = data;
wchar_t* pData = strData.GetBuffer();
wchar_t c;
_int64 POLY = 0x04c11db7;
_int64 regi = 0x0;
//regi包含64位,使用中间的32位(即低第17位到48位)作为运算区域,低16位作为数据缓存区(Unicode字符,每个字符占用16位)
//POLY左移16位,与regi运算区域对齐
POLY <<= 16;
_int64 top_remove = 0x0001000000000000;//用于测试第49位是否为1
int i ;
c = *pData++;
regi |= c;//装载一个字符到缓存区
regi <<= 16;//从缓存区移到运算区低16位
c = *pData++;
if(c != '\0')//c == '\0'意味着整个字符串只有一个字符
{
regi |= c;//装载一个字符到缓存区
regi <<= 16;//运算区现在保存了2个字符
while(true)
{
{
CString strData = data;
wchar_t* pData = strData.GetBuffer();
wchar_t c;
_int64 POLY = 0x04c11db7;
_int64 regi = 0x0;
//regi包含64位,使用中间的32位(即低第17位到48位)作为运算区域,低16位作为数据缓存区(Unicode字符,每个字符占用16位)
//POLY左移16位,与regi运算区域对齐
POLY <<= 16;
_int64 top_remove = 0x0001000000000000;//用于测试第49位是否为1
int i ;
c = *pData++;
regi |= c;//装载一个字符到缓存区
regi <<= 16;//从缓存区移到运算区低16位
c = *pData++;
if(c != '\0')//c == '\0'意味着整个字符串只有一个字符
{
regi |= c;//装载一个字符到缓存区
regi <<= 16;//运算区现在保存了2个字符
while(true)
{