最新新遇到设备采用CRC-CCITT 标准CRC16(1021),网上很多相关文章,但是大都结果不对。以下代码来自https://bbs.csdn.net/topics/390876846回答中的代码

代码如下:

 public static String getCRC16_CCITT(String Source){int crc = 0xFFFF;          // initial valueint polynomial = 0x1021;   // 0001 0000 0010 0001  (0, 5, 12) String tmp = "";byte[] bytes = new byte[Source.Length / 2];for (int i = 0; i < Source.Length - 1; i++){if (i % 2 == 0){tmp = Source.Substring(i, 2);bytes[i / 2] = (byte)Int16.Parse(tmp, System.Globalization.NumberStyles.HexNumber);}}foreach (byte b in bytes){for (int i = 0; i < 8; i++){bool bit = ((b >> (7 - i) & 1) == 1);bool c15 = ((crc >> 15 & 1) == 1);crc <<= 1;if (c15 ^ bit) crc ^= polynomial;}}crc &= 0xffff;string strDest = crc.ToString("X");return strDest;}

测试:

02383638343734303435383131393731301909062046375D1104400000

得出结果为:F5E3

另附CRC在线校验地址:https://www.lammertbies.nl/comm/info/crc-calculation.html

-------------------------------------------------------------------------------------------------------------------------------------------------------------

2019.09.16更新

基于上面的代码,做了一些扩展

public class CRC_CCITT_1021{/// <summary>/// CRC 校验/// </summary>/// <param name="Source">待校验数值</param>/// <returns>true为校验成功,false为校验失败</returns>public static bool CheckCrc(string Source){return string.Compare(getCRC16_CCITT2(Source.Substring(0,Source.Length-4)), Source.Substring(Source.Length-4), true) == 0;}/// <summary>/// CRC 校验/// </summary>/// <param name="Source">待校验数值</param>/// <param name="result">校验结果</param>/// <returns>true为校验成功,false为校验失败</returns>public static bool CheckCrc(string Source,string result){return string.Compare( getCRC16_CCITT2(Source),result,true)==0;}/// <summary>/// 计算CRC/// </summary>/// <param name="Source">源数据</param>/// <param name="offset">起始位置</param>/// <param name="length">数据长度</param>/// <returns>校验结果</returns>public static String getCRC16_CCITT(String Source, int offset, int length){return getCRC16_CCITT2(Source.Substring(offset, length));}/// <summary>/// 计算CRC/// </summary>/// <param name="Source">源数据</param>/// <returns>校验结果</returns>public static String getCRC16_CCITT2(String Source){int crc = 0xFFFF;          // initial valueint polynomial = 0x1021;   // 0001 0000 0010 0001  (0, 5, 12) String tmp = "";byte[] bytes = new byte[Source.Length / 2];for (int i = 0; i < Source.Length - 1; i++){if (i % 2 == 0){tmp = Source.Substring(i, 2);bytes[i / 2] = (byte)Int16.Parse(tmp, System.Globalization.NumberStyles.HexNumber);}}foreach (byte b in bytes){for (int i = 0; i < 8; i++){bool bit = ((b >> (7 - i) & 1) == 1);bool c15 = ((crc >> 15 & 1) == 1);crc <<= 1;if (c15 ^ bit) crc ^= polynomial;}}crc &= 0xffff;string strDest = crc.ToString("X");return strDest;}}

CRC-CCITT 标准CRC16(1021) 算法校验类相关推荐

  1. crc16-ccitt算法c语言,CRC-CCITT 标准CRC16(1021) 算法校验类

    最新新遇到设备采用CRC-CCITT 标准CRC16(1021),网上很多相关文章,但是大都结果不对.以下代码来自https://bbs.csdn.net/topics/390876846回答中的代码 ...

  2. crc 16 1021 java_【软件升级】CCITT标准CRC16(1021)算法 Java代码【转】

    转自https://blog.csdn.net/ywb201314/article/details/52083036 package com.jst.util; /** * CRC-CCITT 算法校 ...

  3. CCITT标准CRC16(1021) Java代码

    背景: 与GPS运营商做数据对接,图片.GPS.轨迹所有数据数据包中都有CRC校验值,需要对数据包进行校验. JAVA代码: package com.jst.util;/*** CRC-CCITT 算 ...

  4. crc-16 ccitt标准在哪里可以看到详细的

    CRC-16 CCITT(循环冗余校验)是一种校验算法,常用于数据通信和存储等领域.您可以在 CCITT 标准化组织的网站上找到有关 CRC-16 CCITT 标准的详细信息. CCITT 的全称是 ...

  5. C++与JAVA代码实现CRC-16/MODBUS算法,且与 http://www.ip33.com/crc.html 进行结果验证

    CRC-16/MODBUS的多项式为:x16+x15+x2+1(8005),宽度为16.运算时,首先将一个16位的寄存器预置为11111111 11111111,然后连续把数据帧中的每个字节中的8位与 ...

  6. crc16的c语言函数 计算ccitt_CCITT标准CRC-16计算C源代码

    /******该文件使用查表法计算CCITT 标准的CRC-16检验码,并附测试代码********/ #include #define CRC_INIT 0xffff   //CCITT初始CRC为 ...

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

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

  8. 【CRC笔记】CRC-16 KERMIT C语言实现

    CRC笔记 CRC-16/KERMIT 简介及C语言实现 一.CRC-16 KERMIT算法简介 二.CRC-16/KERMIT算法基本信息 三.CRC-16/KERMIT算法的C语言实现 1.查表法 ...

  9. 计算CRC程序(CRC16)

    #include <iostream.h> #include <stdio.h> typedef unsigned short u_short; typedef unsigne ...

最新文章

  1. unique函数_C++智能指针2:(虚?)析构函数(标准与实现的差异)
  2. mac怎么实现文件读写c语言,使用Sublime Text和Xcode在Mac上进行文件输入/输出。 C语言...
  3. android中的ContentProvider实现数据共享
  4. mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量
  5. 8-字符串的压缩存储
  6. poj 3624 Charm Bracelet (01背包)
  7. 「SCOI2015」小凸想跑步 解题报告
  8. Python List Comprehension
  9. 一个完整的机器学习项目在Python中演练
  10. 创建页面html,DW软件新建一个html网页
  11. 用Python操作PPT的办公自动化教程
  12. Qt开发——圆面积计算器
  13. 资本资产定价模型CAPM
  14. day10、2 - 小小综合实验升级
  15. 教你免费将手机里的PDF转Word还能同步到电脑
  16. 离散数学中Warshall算法简析
  17. K3运行时错误91解决方法
  18. Redis3.0的主从、集群高可用
  19. Word2016给重复文字全部添加高亮,有截图
  20. oracle数据库怎么创建数据库 oracle数据库工作流程

热门文章

  1. (五)苏世民:我的经验和教训:成功人生的十大信条
  2. TCP/IP协议之ICMP协议
  3. python多目标跟踪卡尔曼滤波_卡尔曼滤波+单目标追踪+python-opencv
  4. 不要浪费那少得可怜的注意力(2)
  5. 数字冰雹数字孪生技术助力嫦娥五号探月任务
  6. 世上最污技术解读,我竟然秒懂了。
  7. 你应该知道的setTimeout秘密
  8. 浅析MOS管串联并联的驱动应用
  9. 计算机教师专业发展规划,信息技术教师个人三年发展规划
  10. 全球人气果汁机的马达电机辐射超标整改—原汁原味