typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned char BYTE;
uint tool_calc_crc16(uchar *buf, uchar len)
{
uchar i;
uint crc = 0;
while (len--)
{
for (i = 0x80; i != 0; i >>= 1)
{
if (crc & 0x8000)
{
crc <<= 1;
crc ^= 0x1021;
}
else
{
crc <<= 1;
}
if ((*buf) & i)
{
crc ^= 0x1021;
}
}
buf++;
}
return crc;
}
int main () {
uint crc = 0;
//FA A5 19 02 01 7A 00 FA 00 00 00 01 18 00 00 00 00 00 00 00 00 00 00 52 95
uchar data_25_buf[25] = {0xFA,0xA5,0x19,0x02,0x01,0x00,0x00,
0x00,0x01,0x20,0x00,0x01,0x18,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x95};
//FA A5 28 01 02 00 00 00 00 00 1F 1F 00 00 00 00 2A 30 00 00 00 60 00 00 1F 1F 00 00 00 00 2A 30 00 00 00 3C 0B 86 A6 27
uchar data_40_buf[40] = {0xFA,0xA5,0x28,0x01,0x02,0x00,0x00,
0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x2A,0x30,0x00,0x00,0x00,
0x60,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00,0x00,0x2A,0x30,0x00,0x00,0x00,0x3C,0x0B,0x86,0xA6,0x27};
crc = tool_calc_crc16(data_25_buf, 23);
data_25_buf[23] = (uchar)((crc >> 8) & 0xFF);
data_25_buf[24] = (uchar)(crc & 0xFF);
printf("data_25_buf:");
for (int i = 0; i < 25; i++)
printf("%02x ", data_25_buf[i]);
printf("\r\n");
crc = tool_calc_crc16(data_40_buf, 38);
data_40_buf[38] = (uchar)((crc >> 8) & 0xFF);
data_40_buf[39] = (uchar)(crc & 0xFF);
printf("data_40_buf:");
for (int i = 0; i < 40; i++)
printf("%02x ", data_40_buf[i]);
printf("\r\n");
return 0;
}