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;
}


相关文章
|
1天前
|
C++
C/C++给文件加crc校验
C/C++给文件加crc校验
29 1
|
1天前
|
弹性计算 运维 Shell
|
1天前
|
弹性计算 运维 安全
|
8月前
|
存储 算法
5.0 CRC32校验技术概述
CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否发生了变化,如果发生变化则拒绝执行,通过此种方法来保护内存或磁盘文件不会被非法篡改。总之,内存和磁盘中的校验技术都是用于确保数据和程序的完整性和安全性的重要技术。
137 1
5.0 CRC32校验技术概述
|
6月前
|
算法 Unix Linux
MD5 生成文件校验
MD5 生成文件校验
69 0
|
9月前
|
前端开发
IE校验问题
IE校验问题
35 0
|
算法
CRC 校验算法
CRC 校验算法
214 0
|
存储 编解码 算法
CRC校验原来这么简单
CRC校验原来这么简单
808 0
CRC校验原来这么简单
|
数据安全/隐私保护
MD5 加密解密 判断密码是否相等 全套实现方式
MD5 加密解密 判断密码是否相等 全套实现方式
254 0
CRC校验
CRC--循环冗余校验
CRC校验