CRC-CCITT16(0xFFFF、XModem、0x1D0F、Kermit) 原创

1、CCITT校验

ushort ccitt_16(const char *data, int len)
{
//    ushort crc16 = 0xFFFF;          // CRC-CCITT (0xFFFF)
//    ushort crc16 = 0x0000;            // CRC-CCITT (XModem)
    ushort crc16 = 0x1D0F;             // CRC-CCITT (0x1D0F)

    while( len-- )
    {
        for(uchar i=0x80; i!=0; i>>=1)
        {
            if((crc16 & 0x8000) != 0)
            {
                crc16 = crc16 << 1;
                crc16 = crc16 ^ 0x1021;
            }
            else
            {
                crc16 = crc16 << 1;
            }
            if((*data & i) != 0)
            {
                crc16 = crc16 ^ 0x1021;  //crc16 = crc16 ^ (0x10000 ^ 0x11021)
            }
        }
        data++;
    }

    return crc16;
}

//直接计算法计算CRC-CCITT (Kermit)
ushort ccitt16(const char *data, int len)
{
    int i;
    ushort crc = 0x0000;

    while(len--)
    {
        crc ^= *data++;
        for (i = 0; i < 8; ++i)
        {
            if (crc & 1)
                crc = (crc >> 1) ^ 0x8408;
            else
                crc = (crc >> 1);
        }
    }

    return crc;
}


// 验证
void MainWindow::on_pushButton_clicked()
{
    char arr[3] = {0x01, 0x02, 0x03};
    qDebug() << ccitt_16(arr, 3);
}

posted @   mahuifa  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤
点击右上角即可分享
微信分享提示