#include "ToolCheck.h" #include /* 8位异或校验代码 */ void ToolCheckXor(unsigned char *Buf, unsigned int BufLen , unsigned char *Xor) { unsigned int i; *Xor = 0; for (i = 0; i < BufLen; i++) { *Xor = (*Xor) ^ Buf[i]; } } /* 8位校验和 */ void ToolCheckSum(unsigned char *Buf, unsigned int BufLen , unsigned char *Sum) { unsigned int i; *Sum = 0; for (i = 0; i < BufLen; i++) { *Sum = (*Sum) + Buf[i]; } } /* CRC 0x31校验 */ void ToolCheckCrc8_0x31(unsigned char *Buf, unsigned int BufLen , unsigned char *Crc) { unsigned char i = 0; while (BufLen--) { (*Crc) ^= *Buf++; for (i = 0; i < 8; i++) { if ((*Crc) & 0x01) { (*Crc) = ((*Crc) >> 1) ^ 0x8c; } else { (*Crc) = ((*Crc) >> 1); } } } } /* CRC16 modbus */ void ToolCheckCrc8_0x8005(unsigned char *Buf, unsigned int BufLen , unsigned short *Crc) { unsigned short i, j, tmp, CRC16; CRC16 = 0xffff; for (i = 0; i < BufLen; i++) { CRC16 ^= Buf[i]; for (j = 0; j < 8; j++) { tmp = (unsigned short)(CRC16 & 0x0001); CRC16 >>= 1; if (tmp == 1) { CRC16 ^= 0xA001; //异或多项式 } } } *Crc = CRC16; }