//
动态生成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);}
转载请注明原文地址: https://ibbs.8miu.com/read-12329.html