这两天弄了下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)
- {
- //校验成功
- }
- }
简单实用,