【VC6.0】CRC-16校验 校验一个数 适合新手理解CRC

//CRC-16/MODBUS x16+x15+x2+1
#include
#include

#define u8 unsigned char
#define u16 unsigned short int
#define u32 unsigned int

void main(void)
{
u16 crc = 0xffff; //余数初始值
u16 XorOut = 0x0000; //结果异或值
u16 Poly = 0xA001; //生成多项式
u8 i;
u8 num = 0;

printf("\t===== 初识CRC16 =====\n");
printf("\t CRC-16 MODBUS\n");
while(1)
{
printf("\t【请输入一个数值】:");
scanf("%d",&num);

crc = 0xffff;
crc = crc^num;

for(i=0;i<8;i++)
{
if(crc&1)
{
crc >>= 1;
crc = crc^Poly;
}
else
{
crc >>= 1;
}
}

crc = crc^XorOut;

printf("\t【计算结果】:\n");
printf("\t【十进制 】:\t%d\n",crc);
printf("\t【十六进制】:\t%x\n",crc);
printf("\t---------------------\n");
printf("\t按ESC键退出,其他键继续\n");
if(getch() == 27)
exit(0);

}
}


相关文档
最新文档