编辑代码

#include <stdio.h>
#include <stdint.h>

/******************************************************************************
** 函数名: crc_dsp();
** 功能: crc校验值的计算
** 输入: reg,data_crc
** 输出:reg
*******************************************************************************/
uint16_t crc_dsp(uint16_t reg,unsigned char data_crc)  
{      
    unsigned char  reghigh;
    uint16_t msb;         //crc寄存器将移出的最低1bit
    uint16_t data;
    uint16_t gx=0xA001,i=0;//i为右移次数,gx为生成多项式

    reghigh = (reg&0xff00)>>8;
    data = data_crc;
    reg = reghigh^data;
    do
    {
        msb = reg&0x0001;
        reg = reg>>1;
        if(msb == 0x0001)
        {
            reg = reg^gx;
        }
        i++;
    }
    while(i<8);
    return(reg);
}

char test_212[] = "##0372QN=20000303021401000;ST=22;CN=2011;PW=123456;MN=YCJC130133043001;Flag=5;\
CP=&&DataTime=20000303021401;a34001-Rtd=0,a34001-Flag=N;a34002-Rtd=0,a34002-Flag=N;a01001-Rtd=0,a01001-Flag=N;\
a01002-Rtd=0,a01002-Flag=N;a01006-Rtd=0,a01006-Flag=N;a01007-Rtd=0,a01007-Flag=N;a01008-Rtd=0,a01008-Flag=N;\
a01012-Rtd=0,a01012-Flag=N;a01013-Rtd=0,a01013-Flag=N;a01014-Rtd=0,a01014-Flag=N&&";
unsigned char temp[4];
int main () {
    uint16_t Register = 0xFFFF;
    int i;

    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    printf("Hello world!     - c.jsrun.net.\n");
    printf("%d\n",sizeof(test_212)-1);

    for(i = 6; i < (sizeof(test_212)-1); i++)
    {
        Register = crc_dsp(Register, test_212[i]);
    }

    temp[0] = ((Register >> 12) & 0xf);
    temp[1] = ((Register >> 8) & 0x0f);
    temp[2] = ((Register >> 4) & 0x0f);
    temp[3] = (Register & 0x0f);

    for(i = 0; i < 4; i++)
    {
        if(temp[i] > 9)
        {
            temp[i] = temp[i] + 0x37;
        }
        else
        {
            temp[i] = temp[i] + 0x30;
        }
    }

    printf("temp0 = 0x%c\n",temp[0]);
    printf("temp0 = 0x%c\n",temp[1]);
    printf("temp0 = 0x%c\n",temp[2]);
    printf("temp0 = 0x%c\n",temp[3]);

    return 0;
}