#include <stdio.h>

typedef unsigned short ushort;

typedef unsigned char uchar;

typedef union _CRC

{

ushort crc16;

uchar by[2];

} CRC;

//输入不带CRC码的数据时,返回值是CRC码

//输入带CRC码的数据时,则可以进行校验,返回0时CRC校验成功,否则CRC校验失败

ushort CRC16(uchar *ba, int size)

{

CRC crc;

crc.crc16 = 0xffff;

int i, l;

for (i=0; i<size; i++)

{

uchar ch = ba[i];

crc.by[0] = crc.by[0] ^ ch;

for (l=0; l<8; l++)

{

if (crc.by[0] & 0x01)

{

crc.crc16 = crc.crc16 >> 1;

crc.crc16 = crc.crc16 ^ 0xa001;

}

else

{

crc.crc16 = crc.crc16 >> 1;

}

}

}

uchar swap = crc.by[0];

crc.by[0] = crc.by[1];

crc.by[1] = swap;

return crc.crc16;

}

void main()

{

printf("0x%x",'9');

uchar ba[9] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,0x39};

CRC crc;

//计算CRC码

crc.crc16 = CRC16(ba, 9);

printf("高字节:0x%x, 低字节:0x%x\n", crc.by[1], crc.by[0]);

//CRC校验

uchar bb[10] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xb0, 0xcf};

if (0 == CRC16(bb, 10))

{

printf("bb 校验成功!");

}

else

{

printf("bb 校验失败!");

}

}

转载于:https://blog.51cto.com/960302601/1653421

c语言CRC16校验(8005)相关推荐

  1. C 语言 crc16校验算法,CRC16的标准校验算法及C语言实现(附代码)

    原标题:CRC16的标准校验算法及C语言实现(附代码) CRC码由发送端计算,放置于发送信息报文的尾部.接收信息的设备再重新计算接收到信息报文的CRC,比较计算得到的CRC是否与接收到的相符,如果两者 ...

  2. 易语言CRC16校验

    .版本 2 .子程序 CRC16_MODBUS, 整数型, , CRC16_MODBUS查表算法 .参数 欲校验的整数, 字节集 .局部变量 crc, 整数型 .局部变量 table, 整数型, , ...

  3. CRC16校验 C语言实现

    文章目录 1 crc.c 2 crc.h 循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用 ...

  4. C语言CRC-16 IBM格式校验函数

    C语言CRC-16 IBM格式校验函数 CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性.基本的CRC-16校验算法实现,参考: C语言 ...

  5. crc16校验c语言单片机实现,三种常用的CRC16校验算法的C51程序的优化

    CRC校验又称为循环冗余校验,是数据通讯中常用的一种校验算法.它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性. CRC校验有多种方式,如:CRC8.CRC16.CRC32 ...

  6. crc16校验c语言程序源码,CRC16代码(C语言实现)

    Modbus CRC16校验代码 嵌入式系统crc16校验码计算函数记录 /************************************************** * CRC 高位字节值 ...

  7. Redis CRC16校验 1.原理概述

    CRC16校验 1.原理概述 来自简书:CRC16算法 来自github.io带图解说:CRC循环冗余校验 来自之乎专栏:CRC-16校验原理与说明 来自简书:CRC16算法 简书摘要: CRC16 ...

  8. 最详细易懂的CRC-16校验原理(附源程序)

    from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html 最详细易懂的CRC-16校验原理(附源程序) 1.循环校验码( ...

  9. CRC16 校验算法

    1.循环校验码(CRC码): 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. 2.生成CRC码的基本原理: 任意一个由二进制位串组成的代码都可以和一个系数仅为' ...

  10. CRC16校验使用体验

    CRC16校验 最近开发有用到CRC16校验,但是网上普遍是CRC-16/MODBUS的,项目上使用的是CRC-16/X25,只有MODBUS例子可以参考,但是对其中几个参数以及这两种算法有什么区别不 ...

最新文章

  1. 如何在 Linux 上用密码加密和解密文件
  2. WeApp-Workflow:基于Gulp 的“微信小程序”前端开发工作流
  3. DB2 在线分析处理(OLAP函数的使用)
  4. Python 计算机视觉(十二)—— OpenCV 进行图像分割
  5. Tomcat启动报404(eclipse)
  6. Android Studio 解决The SDK platform-tools is too old问题
  7. cocos2d-x游戏实例(14)-纵版射击游戏(1)
  8. python笔记-标准库unittest
  9. JavaScript学习之旅-9(原创)
  10. css基础知识汇总7
  11. java执行update的方法_解决Hibernate4执行save()或update()无效问题的方法
  12. Java实现密码加密
  13. mybatis-plus自动填充(创建时间\修改时间)
  14. 华为云数据转发与分析
  15. linux创建任务栏图标
  16. ascii unicode utf8 gkb之间的关系
  17. java开发工程师面试自我介绍_Java程序员如何进行自我介绍
  18. 数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
  19. 增大SwipeRefreshLayout容差
  20. 5000词学英语——DAY10

热门文章

  1. Spark:Spark 编程模型及快速入门
  2. 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
  3. Machine Learning - X. Advice for Applying Machine Learning机器学习算法的诊断和改进 (Week 6)
  4. Scipy教程 - 线性代数库scipy.linalg
  5. c++两个文档匹配数据_MongoDB 数据库的命名、设计规范
  6. easyui的tree获取父节点_通过DOM API 查找节点
  7. C++基础:第八章 深入IO
  8. html+css如何提升,用好这20个css技巧快速提升你的CSS技能
  9. 力扣-389 找不同
  10. 含蓄:为彼此的交往留下余地 — 《别输在不会表达上》