编辑代码

#include <stdio.h>
typedef struct {
    unsigned char ucStatus;
    unsigned char ucCh1H;
    unsigned char ucCh1M;
    unsigned char ucCh1L;
    unsigned char ucCh2H;
    unsigned char ucCh2M;
    unsigned char ucCh2L;
    unsigned char ucCRC;
}SENT_FRM_Nib_STR;


static const unsigned char sentCRC4Table[]=
{
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
13,12,15,14,9,8,11,10,5,4,7,6,1,0,3,2,
7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,
10,11,8,9,14,15,12,13,2,3,0,1,6,7,4,5,
14,15,12,13,10,11,8,9,6,7,4,5,2,3,0,1,
3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12,
9,8,11,10,13,12,15,14,1,0,3,2,5,4,7,6,
4,5,6,7,0,1,2,3,12,13,14,15,8,9,10,11,
1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,
12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3,
6,7,4,5,2,3,0,1,14,15,12,13,10,11,8,9,
11,10,9,8,15,14,13,12,3,2,1,0,7,6,5,4,
15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,
2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13,
8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,
5,4,7,6,1,0,3,2,13,12,15,14,9,8,11,10
};

//polynomia x4+x3+x2+1
//initial seed b'0101
unsigned char Sent2016Crc4Chk(unsigned char statusInclude,SENT_FRM_Nib_STR *sentFrmNibPtr)
{
    unsigned char i;
    unsigned short tmpCS;
    unsigned char ucNibNum = 7;
    unsigned char ucTmp1;
    
    if (statusInclude == 0) //not include status
        ucTmp1 = 1; 
    else
        ucTmp1 = 0;    
    unsigned char chkSum = 5;//initialize checksum
    
    for (i=0; i<ucNibNum; i++)
    {
        tmpCS = ((unsigned char *)sentFrmNibPtr)[i+ucTmp1] + chkSum*16;
        chkSum = sentCRC4Table[tmpCS];
    }

    return chkSum;
}
int main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    unsigned char i;
    SENT_FRM_Nib_STR sentFrmNibTmp = {0x0,0x3,0xb,0x8,0x5,0xa,0xc,0x0};//crcbit要写0x0

    i=Sent2016Crc4Chk(0,&sentFrmNibTmp);
   // i=0xe;
    printf("crc=%d",i);
    return 0;
}