这里是代码
#include<stdio.h>
unsigned int ModBusCRC (unsigned char *ptr,int size);
static unsigned char shujv[50];
static int changdu;
static unsigned int CRC;
static unsigned int CRC16;
int main()
{
scanf("%d",&changdu);
scanf("%x",shujv);
printf("%x\n",shujv[0]);
CRC = ModBusCRC (shujv,changdu);
printf("%x",CRC);
}
unsigned int ModBusCRC (unsigned char *ptr,int size)
{
unsigned short tmp,V;
int a,b;
CRC16=0xffff; //CRC寄存器初始值
for (a=0;a<size;a++) //N个字节
{
CRC16=*ptr^CRC16;
printf("ceshi%x\n",CRC16);
for (b=0;b<8;b++) //8位数据
{
printf("%x",CRC16);
tmp=CRC16 & 0x0001;
CRC16 >>1; //右移一位
if (tmp)
printf("%x",tmp);
CRC16=CRC16 ^ 0xa001; //异或多项式
}
ptr++;
}
V = ((CRC16 & 0x00FF) << 8) | ((CRC16 & 0xFF00) >> 8) ;//高低字节转换
//V=CRC16;
return V;
}
运行结果显示CRC16这个变量会回到原来的值
#include<stdio.h>
unsigned int ModBusCRC (unsigned char *ptr,int size);
static unsigned char shujv[50];
static int changdu;
static unsigned int CRC;
static unsigned int CRC16;
int main()
{
scanf("%d",&changdu);
scanf("%x",shujv);
printf("%x\n",shujv[0]);
CRC = ModBusCRC (shujv,changdu);
printf("%x",CRC);
}
unsigned int ModBusCRC (unsigned char *ptr,int size)
{
unsigned short tmp,V;
int a,b;
CRC16=0xffff; //CRC寄存器初始值
for (a=0;a<size;a++) //N个字节
{
CRC16=*ptr^CRC16;
printf("ceshi%x\n",CRC16);
for (b=0;b<8;b++) //8位数据
{
printf("%x",CRC16);
tmp=CRC16 & 0x0001;
CRC16 >>1; //右移一位
if (tmp)
printf("%x",tmp);
CRC16=CRC16 ^ 0xa001; //异或多项式
}
ptr++;
}
V = ((CRC16 & 0x00FF) << 8) | ((CRC16 & 0xFF00) >> 8) ;//高低字节转换
//V=CRC16;
return V;
}
运行结果显示CRC16这个变量会回到原来的值
