#include <iostream.h>
#include <stdio.h>

typedef unsigned short u_short;
typedef unsigned char  u_char;

一。

//data_buf为报文串、data_length为报文串长度、
//crc_key为生成多项式(16位,去除最大位系数1)
//返回两字节校验码
u_short decCRC(u_char *data_buf,int data_length,u_short crc_key)
{
    u_short crc=0x0000,data_type=0x0000;
 int j=0;
    while(data_length>0)
 {    
        data_type=u_short((crc&0xff00)^(*data_buf<<8));
        for(j=0;j<8;j++)
        {
            if(data_type&0x8000)
            {
    data_type<<=1;    
    data_type^=crc_key;
            }
   else
   {
                data_type<<=1;
   }
        }
     crc<<=8;
     crc^=data_type;
  data_length--;
  data_buf++; 
 }
 return crc;
}

二。效率较高

u_short crc16l(u_char *ptr,u_char len,u_short key)        // ptr 为数据指针,len 为数据长度
{
 u_char i;
 u_short crc=0x0000;
 while(len--)
 {
  for(i=0x80; i!=0; i>>=1)
  {
   if((crc&0x8000)!=0) {crc<<=1; crc^=key;}          
    else crc<<=1;                     
    if((*ptr&i)!=0) crc^=key;                        
  }
  ptr++;
 }
 return(crc);
}

!反转多项式是指在数据通讯时,信息字节先传送或接收低位字节,如重新排位影响 CRC
计算速度,故设反转多项式。!如CRC16  1021的反转多项式是8408

u_short crc16r(u_char *ptr, u_char len,u_short key)
{
 unsigned char i;
 u_short crc=0x0000;
 while(len--!=0)
 {
  for(i=0x01;i!=0;i <<= 1)
  {
   if((crc&0x0001)!=0) {crc >>= 1; crc ^= key;}
   else crc >>= 1;
   if((*ptr&i)!=0) crc ^= key;
  }
  ptr++;
 }
 return(crc);
}

计算CRC程序(CRC16)相关推荐

  1. Linux 大文件crc计算,CRC计算方法与C实现

    CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.实际上,除数据通 ...

  2. 如何在 IAR和 KEIL中计算 CRC值

    关注.星标公众号,不错过精彩内容 转自:STM32单片机 前言 市面上越来越多的产品对其使用提出了安全要求,如何避免使用过程中对操作者带来危险,或者降低这种危险发生的概率,这都是产品安全性需要考虑的. ...

  3. 技术分享 | 如何在 IAR和 KEIL中计算 CRC值

    前言 市面上越来越多的产品对其使用提出了安全要求,如何避免使用过程中对操作者带来危险,或者降低这种危险发生的概率,这都是产品安全性需要考虑的.鉴于此,相关产品需要通过相关行业的安全认证才能生产上市.针 ...

  4. stm32CAN波特率计算小程序(QT源码)

    软件:Qt Creator 开发环境:Window7 用qt做得一个计算波特率的小程序,在实际的应用中我们设置波特率的时候是通过以下参数来定的: CAN_InitStructure.CAN_SJW=C ...

  5. 怎么计算python程序执行时间_【华为云技术分享】计算python程序执行时间

    写代码的时候,我们可能想知道python的执行效率如何,有如下几种方法可以计算python程序执行时间. 1.方法1 import datetime starttime = datetime.date ...

  6. matlab中if语句多个_科学计算 | MATLAB程序设计基础

    点击"蓝字"关注我们 科学计算 | MATLAB程序设计基础 引言 在前面的学习中,我们都是在命令行窗口逐条输入命令,然后由matlab解释执行,这种交互式的命令执行方式,操作简单 ...

  7. python计算运动会某个参赛选手的得分。数据保存在文件中_成绩计算电脑程序的使用说明...

    成绩计算电脑程序的使用说明 为了计算成绩,特制作这个电脑程序,说明如下: 一.开发软件:Python 二.使用说明: 在电脑D盘根目录下建立两个excel文件,一个是1.xlsx,另一个是2.xlsx ...

  8. 【华为云技术分享】计算python程序执行时间

    写代码的时候,我们可能想知道python的执行效率如何,有如下几种方法可以计算python程序执行时间. 1.方法1 import datetimestarttime = datetime.datet ...

  9. 在一个请求分页系统中,假定系统分配给一个作业的物理块数为 3,并且此作业的页面走向为 2、3、2、1、5、2、4、5、3、2、5、2。试用 FIFO和 LRU 两种算法分别计算出程序访问过程中所发生

    页面置换算法 题目: 在一个请求分页系统中,假定系统分配给一个作业的物理块数为 3,并且此作业的页面走向为 2.3.2.1.5.2.4.5.3.2.5.2.试用 FIFO和 LRU 两种算法分别计算出 ...

最新文章

  1. springboot下Static变量通过@Value和set方法注入失败的问题和解决办法
  2. SSH运维总结-【liunx学习】
  3. jsonArray转换成List
  4. mfc清除配置ini文件的数据_大数据环境搭建与配置——aptget源更新、CRT链接、文件服务器配置...
  5. 期权、RSU的区别与行权事宜
  6. 在NHibernate的单表继承模式下通过父类Repository查询子类
  7. php微信卡包sdk,微信卡包会员系统
  8. 怎样实现VLAN间通信,三种解决方案,一节课带你掌握
  9. javascript中function前面加(/!/+/-/~的含义
  10. 教你如何实现网页自由!
  11. 程序员七夕表白方法来了,带走!
  12. mongorepository查询条件_springboot jpa + mongodb实现多条件查询数据
  13. 计算机中文名称乱码,中文文件名乱码怎么解决?
  14. python单用户登录_Python 实现用户登录的简单方法
  15. 1.html5+css3基础学习笔记(上)
  16. matlab的损失函数mse,MSELoss损失函数
  17. 用计算机娱乐教学反思,计算机教学反思
  18. 不能完成此操作, 因为发生意外错误(错误代码-51)
  19. 什么是BBR加速,Centos7如何开启BBR加速,优化服务器的传输速度,避免堵塞
  20. 盘点七大接地气的翅片管式换热器设计软件

热门文章

  1. HCNP-路由交换:交换机基础
  2. cnpm下载安装失败问题解决
  3. ps入门第3天_ps抠图选区的几种方法
  4. 酷家乐招聘 | 遇见offer之就要圆你的大厂梦
  5. 从贝叶斯公式到贝叶斯判别准则
  6. 想要快速来钱?你连这些竟然都不知道?!
  7. 香港电台知名主持人梁继璋写给儿子的一封信
  8. fluent-bit日志上传到s3-efs
  9. 迪杰斯特拉dijkstra算法的python实现
  10. 2022年App分发渠道整理