【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);
}
}
相关主题