这两天弄了下CRC校验,在8位、16位、32位中选择了16位校验。代码如下:
/// <summary>
/// CRC校验
/// </summary>
/// CRC校验C#版
private int CRC_Jiaoyan(string Buffer_Data)
{
string ptr = Buffer_Data;//校验的字符串(OAE202........)
byte[] ptrHex=strToToHexByte(ptr);//由字符串转为16进制字节数组
uint len = 723;//723个字节
ulong temp = 0;
int i;
for (len = 0; len < 723; len++)
{
for (i = 0x80; i != 0; i = i >> 1)
{
temp = temp * 2;
if ((temp & 0x10000) != 0)
temp = temp ^ 0x11021;
if ((ptrHex[len] & i) != 0)
temp = temp ^ (0x10000 ^ 0x11021);
}
}
if (temp == 0)
{
//校验成功返回1
return 1;
}
else
{ //不成功返回2
return 2; }
}
//CRC校验C语言版
void CRC_Jiaoyan(void)
{
uchar *ptr = Buffer_Data;
uint len = 723;
ulong temp = 0;
uchar i;
while(len--)
{
for(i = 0x80; i != 0; i = i >> 1)
{
temp = temp * 2;
if((temp & 0x10000) != 0)
temp = temp ^ 0x11021;
if((*ptr & i) != 0)
temp = temp ^ (0x10000 ^ 0x11021);
}
ptr++;
}
if(temp == 0)
{
//校验成功
}
}
简单实用,