CRC-CCITT 标准CRC16(1021) 算法校验类
最新新遇到设备采用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) 算法校验类相关推荐
- crc16-ccitt算法c语言,CRC-CCITT 标准CRC16(1021) 算法校验类
最新新遇到设备采用CRC-CCITT 标准CRC16(1021),网上很多相关文章,但是大都结果不对.以下代码来自https://bbs.csdn.net/topics/390876846回答中的代码 ...
- crc 16 1021 java_【软件升级】CCITT标准CRC16(1021)算法 Java代码【转】
转自https://blog.csdn.net/ywb201314/article/details/52083036 package com.jst.util; /** * CRC-CCITT 算法校 ...
- CCITT标准CRC16(1021) Java代码
背景: 与GPS运营商做数据对接,图片.GPS.轨迹所有数据数据包中都有CRC校验值,需要对数据包进行校验. JAVA代码: package com.jst.util;/*** CRC-CCITT 算 ...
- crc-16 ccitt标准在哪里可以看到详细的
CRC-16 CCITT(循环冗余校验)是一种校验算法,常用于数据通信和存储等领域.您可以在 CCITT 标准化组织的网站上找到有关 CRC-16 CCITT 标准的详细信息. CCITT 的全称是 ...
- C++与JAVA代码实现CRC-16/MODBUS算法,且与 http://www.ip33.com/crc.html 进行结果验证
CRC-16/MODBUS的多项式为:x16+x15+x2+1(8005),宽度为16.运算时,首先将一个16位的寄存器预置为11111111 11111111,然后连续把数据帧中的每个字节中的8位与 ...
- crc16的c语言函数 计算ccitt_CCITT标准CRC-16计算C源代码
/******该文件使用查表法计算CCITT 标准的CRC-16检验码,并附测试代码********/ #include #define CRC_INIT 0xffff //CCITT初始CRC为 ...
- C语言CRC-16 IBM格式校验函数
C语言CRC-16 IBM格式校验函数 CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性.基本的CRC-16校验算法实现,参考: C语言 ...
- 【CRC笔记】CRC-16 KERMIT C语言实现
CRC笔记 CRC-16/KERMIT 简介及C语言实现 一.CRC-16 KERMIT算法简介 二.CRC-16/KERMIT算法基本信息 三.CRC-16/KERMIT算法的C语言实现 1.查表法 ...
- 计算CRC程序(CRC16)
#include <iostream.h> #include <stdio.h> typedef unsigned short u_short; typedef unsigne ...
最新文章
- unique函数_C++智能指针2:(虚?)析构函数(标准与实现的差异)
- mac怎么实现文件读写c语言,使用Sublime Text和Xcode在Mac上进行文件输入/输出。 C语言...
- android中的ContentProvider实现数据共享
- mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量
- 8-字符串的压缩存储
- poj 3624 Charm Bracelet (01背包)
- 「SCOI2015」小凸想跑步 解题报告
- Python List Comprehension
- 一个完整的机器学习项目在Python中演练
- 创建页面html,DW软件新建一个html网页
- 用Python操作PPT的办公自动化教程
- Qt开发——圆面积计算器
- 资本资产定价模型CAPM
- day10、2 - 小小综合实验升级
- 教你免费将手机里的PDF转Word还能同步到电脑
- 离散数学中Warshall算法简析
- K3运行时错误91解决方法
- Redis3.0的主从、集群高可用
- Word2016给重复文字全部添加高亮,有截图
- oracle数据库怎么创建数据库 oracle数据库工作流程