实验指令: 前23位表示 信息头 + 信息内容。24,25位是待计算的校验位。26位是结束码
7E 01 00 00 01 10 02 00 27 00 0C 00 02 00 00 00 00 00 50 00 3C 00 03 90 0B 0D
在线计算
代码实现
#include <stdio.h>
#include <Windows.h>
UINT8 data[23] = { 0x7E, 0x01, 0x00, 0x00, 0x01, 0x10, 0x02, 0x00,
0x27, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0x00, 0x3C, 0x00, 0x03 };
UINT16 CRC16(UINT8 *ptr, UINT16 len)
{
unsigned char i;
unsigned short crc = 0xFFFF;
if (len == 0) {
len = 1;
}
while (len--) {
crc ^= *ptr;
for (i = 0; i<8; i++)
{
if (crc & 1) {
crc >>= 1;
crc ^= 0xA001;
} else {
crc >>= 1;
}
}
ptr++;
}
return(crc);
}
int main()
{
printf("%04x\n", CRC16(data, 23));
getchar();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)