64,646
社区成员
发帖
与我相关
我的任务
分享
USHORT Crc16(UCHAR *buff,int length)
{
USHORT regCRC = 0xffff;
UCHAR i,j;
for (i = 0; i < length; i++) {
regCRC ^= *buff++;
for (j = 0; j < 8; j++) {
if (regCRC & 0x0001)
regCRC = regCRC >> 1^0xA001;
else
regCRC >>= 1;
}
}
regCRC = ((regCRC << 8) & 0xFF00) | ((regCRC >> 8) & 0x00FF);
return regCRC;
}
Crc16 的代码,modbus 中的标准算法,亲测可用。unsigned short CRC16(unsigned char *buf,int len) {
unsigned short CRC = 0xffffu;
int i,j;
for (i=0;i<len;i++) {
CRC ^= *buf++;
for (j=0;j<8;j++) {
if (CRC & 0x0001u)
CRC = CRC >> 1^0xA001u;
else
CRC >>= 1;
}
}
CRC = ((CRC << 8) & 0xFF00u) | ((CRC >> 8) & 0x00FFu);
return CRC;
}