博客
关于我
crc16校验代码中 多项式码明明是8005 为什么要用A001来异或,还有CRC16-REV=A001是什么意思
阅读量:128 次
发布时间:2019-02-27

本文共 1208 字,大约阅读时间需要 4 分钟。

0x8005=1000 0000 0000 0101B

0xA001=1010 0000 0000 0001B
对比两个二进制高低bai位正好是完du全相反的,CRC校验分为zhi正向校验与反向校验。正dao向校验高位在左,反向校验低位在左,比如正向CRC校验的数据为0xAF5D=1010 1111 0101 1101B与0x8005异或时应该是0xAF5D^0x8005,而要使用0xA001与数据进行校验也应该使0xAF5D高低位换顺序为0xBAF5=1011 1010 1111 0101B。正向校验使用左移位,反向校验使用右移位,其实原理是一样的,得看校验的数据高低位顺序。

请注意使用时高低位的区别,0X8005和0XA001实际上只是高低位互反,有些硬件的存储模式不一样,因为会根据情况调整使用的具体方法,算法并无本质区别,希望能帮到你。

一般电气、自动化仪表的crc16校验,多项式码选用16进制A001。

 

附参考:

数据(16进制):01 03 61 00 00 02 CRC校验:F7 DB     多项式是A001H

附C语言实现代码:

 
  1.  
  2. #include <stdio.h>

  3.  
  4.  
  5.  
  6. int main(void)

  7. {

  8. unsigned short tmp = 0xffff;

  9. unsigned short ret1 = 0;

  10. unsigned char buff[6] = {0};

  11. buff[0] = 0x01;

  12. buff[1] = 0x03;

  13. buff[2] = 0x61;

  14. buff[3] = 0x00;

  15. buff[4] = 0x00;

  16. buff[5] = 0x02;

  17.  
  18. for(int n = 0; n < 6; n++){/*此处的6 -- 要校验的位数为6个*/

  19. tmp = buff[n] ^ tmp;

  20. for(int i = 0;i < 8;i++){ /*此处的8 -- 指每一个char类型又8bit,每bit都要处理*/

  21. if(tmp & 0x01){

  22. tmp = tmp >> 1;

  23. tmp = tmp ^ 0xa001;

  24. }

  25. else{

  26. tmp = tmp >> 1;

  27. }

  28. }

  29. }

  30. /*CRC校验后的值*/

  31. printf("%X\n",tmp);

  32. /*将CRC校验的高低位对换位置*/

  33. ret1 = tmp >> 8;

  34. ret1 = ret1 | (tmp << 8);

  35. printf("ret: %X\n",ret1);

  36. return 0;

  37. }

输出结果:

 
  1. F7DB

  2. ret: DBF7

另外用CRC校验工具得到结果是相同的但是多项式却是8005,只有表中选项出上面结果,其他选线选择或不选结果是另外的。

01 03 61 00 00 02的CRC校验结果

01 03 61 00 00 02的倒序是40 00 00 86 C0 80

结果也不相同。也不是倒序。不知道为什么?

 

转载地址:http://lcpb.baihongyu.com/

你可能感兴趣的文章
nginx反向代理、文件批量改名及统计ip访问量等精髓总结
查看>>
Nginx反向代理与正向代理配置
查看>>
Nginx反向代理及负载均衡实现过程部署
查看>>
Nginx反向代理和负载均衡部署指南
查看>>
Nginx反向代理是什么意思?如何配置Nginx反向代理?
查看>>
nginx反向代理解决跨域问题,使本地调试更方便
查看>>
nginx反向代理转发、正则、重写、负摘均衡配置案例
查看>>
Nginx反向代理配置
查看>>
Nginx启动SSL功能,并进行功能优化,你看这个就足够了
查看>>
nginx启动脚本
查看>>
Nginx在Windows上和Linux上(Docker启动)分别配置基本身份认证示例
查看>>
Nginx在Windows下载安装启动与配置前后端请求代理
查看>>
Nginx多域名,多证书,多服务配置,实用版
查看>>
nginx如何实现图片防盗链
查看>>
Nginx学习总结(12)——Nginx各项配置总结
查看>>
Nginx学习总结(13)——Nginx 重要知识点回顾
查看>>
Nginx学习总结(14)——Nginx配置参数详细说明与整理
查看>>
Nginx学习总结(15)—— 提升 Web 应用性能的十个步骤
查看>>
Nginx学习总结(8)——Nginx服务器详解
查看>>
nginx学习笔记002---Nginx代理配置_案例1_实现了对前端代码的方向代理_并且配置了后端api接口的访问地址
查看>>