CRC16_CCITT_FALSE校验代码 及 验证

简介: CRC16_CCITT_FALSE校验代码 及 验证

标准CRC16

/**
*bufData:指令数据
*buflen:处理的指令长度
*pcrc:处理完之后的CRC码
**/
int get_crc16(unsigned char* bufData, unsigned int buflen)
{
    int ret = 0;
    unsigned short CRC = 0xffff;
    unsigned short POLYNOMIAL = 0xa001;
    int i, j;
    //指令为空
    if (bufData == NULL)
    {
        return -1;
    }
    //校验计算的长度为0
    if (buflen == 0)
    {
        return ret;
    }
    for (i = 0; i < buflen; i++)
    {
        CRC ^= bufData[i];
        //总共八次右移操作
        for (j = 0; j < 8; j++)
        {
            if ((CRC & 0x0001) != 0)
            {
                //右移的移出位为1
                CRC >>= 1;
                CRC ^= POLYNOMIAL;
            }
            else
            {
                //右移的移出位为0
                CRC >>= 1;
            }
        }
    }
    printf("CRC=%X\n", CRC);
    //低位在前,高位在后
    unsigned char* pcrc;
    qDebug() << "pcrc[0] =" <<  (unsigned char)(CRC & 0x00ff);
    qDebug() << "pcrc[1] = " <<(unsigned char)(CRC >> 8);
    return ret;
}
#include <iostream>
unsigned short CRC16_CCITT_FALSE(unsigned char* puchMsg, unsigned int usDataLen)
{
    unsigned short wCRCin = 0xFFFF;
    unsigned short wCPoly = 0x1021;
    unsigned char wChar = 0;
    while (usDataLen--) {
        wChar = *(puchMsg++);
        wCRCin ^= (wChar << 8);
        for (int i = 0; i < 8; i++) {
            if (wCRCin & 0x8000) {
                wCRCin = (wCRCin << 1) ^ wCPoly;
            }
            else {
                wCRCin = wCRCin << 1;
            }
        }
    }
    return (wCRCin);
}
//发送    0xAA , 0x06 , 0x10, 0x01
//接受    42991 (A7EF)
int main()
{
    unsigned char value[] = { 0xAA , 0x06 , 0x10, 0x01 };
    unsigned short result = CRC16_CCITT_FALSE(value, 4);
    std::cout << result;
    return 0;
}


相关文章
|
7月前
|
C++
C/C++给文件加crc校验
C/C++给文件加crc校验
120 1
|
7月前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
72 0
|
算法 Unix Linux
MD5 生成文件校验
MD5 生成文件校验
141 0
|
JavaScript 前端开发
🎖️typeScrpt中如何从验证字符串?
模板文字类型本质上是一种字符串类型。通过定义字符串必须匹配的模式,这些类型提供了一种验证和推断数据的方式。它们是大约三年前在 TypeScript 4.1 中引入的。根据最初的 GitHub PR,以下示例演示了 TypeScript 利用模板文字类型获得的多功能特性。
136 0
|
前端开发
IE校验问题
IE校验问题
53 0
|
存储 编解码 算法
CRC校验原来这么简单
CRC校验原来这么简单
996 0
CRC校验原来这么简单
|
JavaScript 前端开发
将jquery validate校验框架的remote异步验证设置为同步校验
将jquery validate校验框架的remote异步验证设置为同步校验
359 0
将jquery validate校验框架的remote异步验证设置为同步校验
|
算法
CRC 校验算法
CRC 校验算法
264 0
CRC校验
CRC--循环冗余校验
CRC校验
|
PHP
tp自动验证流程和返回空数组的问题
tp自动验证流程和返回空数组的问题
118 0