//动态生成CRC32的码表
unsigned long Crc32Table[256];
void GetCRC32Table()
...{
int i,j;
unsigned long Crc;
for (i = 0; i < 256; i++)
...{
Crc = i;
for (j = 0; j < 8; j++)
...{
if (Crc & 1)
Crc = (Crc >> 1) ^ 0xEDB88320;
else
Crc >>= 1;
}
Crc32Table[i] = Crc;
}
}
//获取字符串CRC32校验值
void GetCrc32(LPTSTR InStr)
...{
GetCRC32Table();
ULONG crc=0xffffffff;
unsigned char* buffer;
buffer = (unsigned char*)InStr;
int len=strlen(InStr);
for(int i=0; i<len; i++)
...{
crc = (crc >> 8) ^ Crc32Table[(crc & 0xFF) ^ *buffer++];
}
char value[10]=...{0};
//转换成16进制字符串
itoa(crc^0xffffffff,value,16);
//小写字符转换成大写字符
for(i=0;i<strlen(value);i++)
...{
value[i]=toupper(value[i]);
}
strcpy(InStr,value);
}
//调用示例
void CVCGetDlg::OnOK() 
...{
UpdateData(TRUE);
char value[10]=...{0};
char InData[100]=...{0};
strcpy(InData,m_InText);
GetCrc32(InData);
m_OutText=InData;
UpdateData(FALSE);
}
本文介绍了一种使用CRC32算法计算字符串校验值的方法,并提供了完整的C语言实现代码示例。通过动态生成CRC32码表,可以高效地计算出任意字符串的CRC32校验值。
1094

被折叠的 条评论
为什么被折叠?



