transferServiceExe/CrcUtil.cpp

58 lines
898 B
C++

#include "CrcUtil.h"
uint16 usMBCRC16(uint8 * pucFrame, uint8 usLen)
{
uint8 ucCRCHi = 0xFF;
uint8 ucCRCLo = 0xFF;
int iIndex;
while (usLen--)
{
iIndex = ucCRCLo ^ *(pucFrame++);
ucCRCLo = (uint8)(ucCRCHi ^ aucCRCHi[iIndex]);
ucCRCHi = aucCRCLo[iIndex];
}
return (uint16)(ucCRCHi << 8 | ucCRCLo);
}
uint16 CRC16(uint8 *ptr, uint8 len)
{
uint8 i;
uint16 crc = 0;
while (len-- != 0)
{
for (i = 0x80; i != 0; i /= 2)
{
if ((crc & 0x8000) != 0)
{
crc *= 2; crc ^= 0x8005;
}
else
crc *= 2;
if ((*ptr&i) != 0)
crc ^= 0x8005;
}
ptr++;
}
return(crc);
}
/*
CRC16źĆË㺯Ęý
*/
uint16 MB_CRC16(uint8 Buff[], int count)
{
uint8 CRCHi = 0xFF;
uint8 CRCLo = 0xFF;
int index;
int i = 0;
while ((count--) > 0)
{
index = CRCLo ^ Buff[i++];
CRCLo = (uint8)(CRCHi ^ _CRCHi[index]);
CRCHi = _CRCLo[index];
}
return (uint16)(CRCHi << 8 | CRCLo);
}