C#_CRC-16/CCITT-FALSE计算加判断

前言:浪费半天时间研究出来的,试了网上其他好几个版本都算了不对,讲述的也不明确,我是直接移植一个c语言的版本,直接看代码,一个函数包含计算和判断的工能

private bool CRC16(byte[] buffer, ref byte[] ResCRC16)  //C# crc-16/CCITT-FALSE,带判断校验的
{bool status = false;ushort crc = 0xFFFF;int size = buffer.Length;  //计算待计算的数据长度int i = 0;if (size > 0){while(size-- > 0){crc = (ushort)((crc >> 8)|(crc << 8));crc ^= buffer[i++];crc ^= (ushort)(((byte)crc) >> 4);crc ^= (ushort)(crc << 12);crc ^= (ushort)((crc & 0xff) << 5);}}//判断输入的ResCRC16与计算出来的是否一致if(ResCRC16[0] == (byte)((crc >> 8) & 0xff) && ResCRC16[1] == (byte)(crc & 0xff)){status = true;}ResCRC16[1] = (byte)(crc & 0xff);ResCRC16[0] = (byte)((crc >> 8) & 0xff);return status;
}

接下来演示使用过程

private void button1_Click(object sender, EventArgs e)
{byte[] data = new byte[] { 0x01 ,0x22, 0x01, 0x08, 0x00, 0xe8, 0xa3, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00 };byte[] data2 = new byte[2];byte[] data3 = new byte[] { 0x94,0x5c};CRC16(data,ref data2);Console.WriteLine(data2[0]);  //打印CRC算出来的值Console.WriteLine(data2[1]);  //打印CRC算出来的值Console.WriteLine(CRC16(data, ref data3));  //判断是否是预设的CRC
}

C#_CRC-16/CCITT-FALSE计算加判断相关推荐

  1. C++ CRC校验 CRC16 CCITT FALSE x16 + x12 + x5 + 1

    以下样例为ASCII 请注意 //CRC - 16 / CCITT - FALSE  x16 + x12 + x5 + 1 unsigned short crc16(const unsigned ch ...

  2. led大屏按实际尺寸设计画面_P10户外LED电子大屏幕按16:9计算屏幕实际尺寸

    P10户外 P10户外LED电子大屏幕按16:9计算屏幕实际尺寸 P10户外LED电子大屏幕16:9计算方法 1.按16:9计算LED显示屏120平方米的长和宽 16X*9X=120 144X2=12 ...

  3. notepad++ 16进制数字加前缀0x

    最近在写一个C#的嵌入式打印机的demo 遇到一个问题 因为我们研发给出指令是16进制,但前面没有0x,写代码时需要在前面增加0x 在csdn上面搜了一下,发现有用txt增加的或者是notepad++ ...

  4. C++实现设计一个圆形类(Circle),和一个点类(Point), 计算并判断点和圆的位置关系

    题目要求 设计一个圆形类(Circle),和一个点类(Point), 计算并判断点和圆的位置关系. 无分区版 : #include <iostream> using namespace s ...

  5. spring Mybatis注解加判断

    spring Mybatis注解加判断 spring Mybatis注解加判断 一.用script标签包围,然后像xml语法一样书写 判断参数是否为空或者为null,没有参数则不执行该语句 @Sele ...

  6. java计算加减表达式_【Java】计算加减乘除数学公式(简单计算器)含小数

    package calculation; /*import java.util.Scanner; import java.util.List; import java.util.ArrayList; ...

  7. 【数学计算】判断两条线段是否相交+计算两条线段的交点和夹角

    序言 还是那句话,学习是为了应用.书到用时方恨"用得少" 1. 计算两条直线的交点 直线一般式方程 A x + B y + C = 0 Ax+By+C = 0 Ax+By+C=0 ...

  8. 线段(向量)的计算(判断线段重叠、相交,合并线段,点与线的关系)

    主要内容: 判断两线段是否相交 计算两线段的交叉点 点与直线的位置关系 判断两线段重合并计算其重合部分 判断合并两条线段 说明全都在注释里了,有的方法可能不是最佳,欢迎大家提出建议~~ public ...

  9. 阿里云物联网边缘计算加载MQTT驱动

    写在前面 本文在LinkEdge快速入门样例驱动的基础上,加载了MQTT订阅的客户端,使得边缘端容器可以通过MQTT获得外部数据. 1.         系统需求 物联网边缘计算平台,又名Link I ...

最新文章

  1. 十二届蓝桥杯省赛B组C++解析(填空题部分)
  2. ABS是啥,为什么区块链可以与它完美结合?
  3. numpy.squeeze() 去除维度为1的向量
  4. ORACLE空值漫谈1
  5. 用朴素贝叶斯模型预测柯南中被害人和凶手!
  6. 【Linux】一步一步学Linux——lastlog命令(100)
  7. ×××梦 最近要开始研究Excel 2010
  8. linux下面的navicat中文出现白色方块
  9. WCF 4 高级编程 - 读书笔记
  10. 查看mysql的安装信息
  11. JavaScript的一些名词(持续更新中-取自javaScript高级程序设计)
  12. Unity外接设备摇杆控制
  13. TestNG 单元测试框架的使用
  14. Photoshop教程_ps中怎么载入图案?PS图案如何导入?
  15. 风险加权资产(RWA)分析管理系统
  16. kirin710f是什么处理器_kirin710什么处理器
  17. 记一次小白调参baseline——NLP中文预训练模型泛化能力比赛
  18. 怎么学好Web前端开发 有哪些相关书籍推荐
  19. visualmap折线图_echarts折线图实现切断效果
  20. springboot 银联支付(快捷支付)

热门文章

  1. Cesium测量工具,距离测量、面积测量、高度测量
  2. Protobuf报错CHECK failed: GeneratedDatabase()->Add(encoded_file_descriptor, size):
  3. Tomcat:Tomcat网站上的core和deployer的区别
  4. 直观认识Windows
  5. 修改谷歌浏览器ua的简单方法
  6. llalallalallalalla
  7. 【Matplotlib】 移动spines
  8. 一年来终于用实际案例把matplotlib的绘图坐标轴说清楚了-太给力了
  9. android 查看手机存储空间以及文件状态及大小
  10. apache 支持下载rar格式文件问题