CRC

//CRC16校验

ushort CRC16Valid(const TByteDynArray buffer, int len)

{

    ushort crc = 0, tmp;

    int index = 0;

    while(len--)

    {

        tmp = buffer[index++];

        crc = crc ^ (tmp <<8);

        for (int i = 0; i < 8;i++)

        {

            if (crc & 0x8000)

                crc = (crc <<1) ^ 0x1021;

            else

                crc <<= 1;

        }

    }

    crc = (crc >> 8) | (crc<< 8);

    return(crc);

}

//---------------------------------------------------------------------------

//CRC16校验

ushort CRC16Valid(const uchar* buffer, int len)

{

    ushort crc = 0, tmp;

    while(len--)

    {

        tmp = *buffer++;

        crc = crc ^ (tmp <<8);

        for (int i = 0; i < 8;i++)

        {

            if (crc & 0x8000)

                crc = (crc <<1) ^ 0x1021;

            else

                crc <<= 1;

        }

    }

    crc = (crc >> 8) | (crc<< 8);

    return(crc);

}

 

//异或校验

void XORValid(const TByteDynArray buffer, int len)

{

    char checksum = 0, cr = 13, ln =10;

    char ch1,c1; //校验位的高四位和第四位

    for (int i = 0;  i<len; i++)

    {

        checksum = checksum ^buffer[i+1]; //进行异或交验取值

    }

 

    ch1 = (checksum  >> 4) & 0x0F;  //取高位数;

    c1 = checksum & 0x0F; //取低位数;

 

    if (ch1 < 10) //低于10的数

        ch1 = ch1  +  '0';

    else

        ch1 = (ch1 - 10 ) +  'A'; //不低于10的16进制数,如:A、B、C、D、E、F

 

    if (c1 < 10)

        c1 = c1  +  '0';

    else

        c1 = (c1 - 10 )+  'A';

 

   XOR_High=ch1;

   XOR_Low =c1;

}

 

//-----------------------------------------------------------------------------

//异或校验

void XORValid(const uchar* buffer, int len)

{

    charchecksum = 0, cr = 13, ln = 10;

    charch1,c1; //校验位的高四位和第四位

    for (inti = 0;  i<len;  i++)

    {

        checksum = checksum ^ buffer[i+1]; //进行异或交验取值

    }

 

    ch1 =(checksum  >> 4) & 0x0F; //取高位数;

    c1 =checksum & 0x0F;  //取低位数;

 

    if (ch1< 10) //低于10的数

        ch1= ch1  + '0';

    else

        ch1= (ch1 - 10 ) +  'A'; //不低于10的16进制数,如:A、B、C、D、E、F

 

    if (c1 < 10)

        c1 = c1  +  '0';

    else

        c1 = (c1 - 10 )+  'A';

 

    XOR_High=ch1;

    XOR_Low =c1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值