首页 > 编程语言 >C# CRC 校验实现

C# CRC 校验实现

时间:2024-08-03 10:06:12浏览次数:12  
标签:C# 校验 System CRC Windows new bRet btnCrc Drawing

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CRCTest
{
public partial class CRCForm : Form
{
//参考文献
//https://blog.csdn.net/liyuanbhu/article/details/7882789
private ushort[] Crc16Array ={0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,
0xC5C1,0xC481,0x0440,0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,0x0A00,0xCAC1,
0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841,0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,
0x1A40,0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,0x1400,0xD4C1,0xD581,0x1540,
0xD701,0x17C0,0x1680,0xD641,0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040,0xF001,
0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,
0x3480,0xF441,0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,0xFA01,0x3AC0,0x3B80,
0xFB41,0x3900,0xF9C1,0xF881,0x3840,0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,
0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,0xE401,0x24C0,0x2580,0xE541,0x2700,
0xE7C1,0xE681,0x2640,0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041,0xA001,0x60C0,
0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,
0xA441,0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,0xAA01,0x6AC0,0x6B80,0xAB41,
0x6900,0xA9C1,0xA881,0x6840,0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,0xBE01,
0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40,0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,
0xB681,0x7640,0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041,0x5000,0x90C1,0x9181,
0x5140,0x9301,0x53C0,0x5280,0x9241,0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440,
0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,
0x59C0,0x5880,0x9841,0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,0x4E00,0x8EC1,
0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41,0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,
0x8641,0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040};

public CRCForm()
{
InitializeComponent();
}

#region string转byte List
private bool StrToBytes(string sHex, ref List<byte> bytesBuff, ref string sMsg)
{
bool bRet = false;
try
{
if (sHex.Length<2)
{
sMsg = "HexString too short";
return bRet;
}
if ((sHex.Length % 2)!=0)
{
sMsg = "HexString Length should be double";
return bRet;
}
for(int i=0;i< sHex.Length;i++)
{
if (!(char.IsDigit(sHex[i])|| char.IsLetter(sHex[i])))
{
sMsg = "HexString incorrect";
return bRet;
}
if ((i%2)==1)
{
bytesBuff.Add(Convert.ToByte("0x" + sHex[i - 1] + sHex[i],16));
}
}
bRet = true;
}
catch(Exception ex)
{
sMsg = "StrToBytesException:"+ex.Message;
}
return bRet;
}
#endregion

#region CRC校验
private bool CalcCRC16(List<byte> bytesBuff,ref ushort CRCvalue,ref string sMsg)
{
bool bRet = false;
try
{
int nbyte = bytesBuff.Count;
for (int i=0;i< nbyte;i++)
{
byte[] CRCBytes = BitConverter.GetBytes(CRCvalue);
CRCvalue = (ushort)(CRCBytes[1] ^ Crc16Array[bytesBuff[i] ^ CRCBytes[0]]);
}
bRet = true;
}
catch(Exception ex)
{
sMsg = "CalcCRC16Exception:"+ex.Message;
}
return bRet;
}
#endregion

#region 执行
private void btnCrc_Click(object sender, EventArgs e)
{
bool bRet = false;
string sMsg = string.Empty;
try
{
List<byte> byteList = new List<byte>();
bRet = StrToBytes(TBByteText.Text, ref byteList, ref sMsg);
if (!bRet)
{
MessageBox.Show(sMsg);
return;
}
ushort CRCvalue = 0xFFFF;
bRet = CalcCRC16(byteList,ref CRCvalue,ref sMsg);
if (!bRet)
{
MessageBox.Show(sMsg);
return;
}

byte[] CRCBytes = BitConverter.GetBytes(CRCvalue);
TBCRCText.Text = TBByteText.Text + CRCBytes[0].ToString("X2") + CRCBytes[1].ToString("X2");

}
catch(Exception ex)
{
MessageBox.Show("btnCrc_ClickException:"+ex.Message);
}
}
#endregion
}
}

 

画面部分:

namespace CRCTest
{
partial class CRCForm
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows 窗体设计器生成的代码

/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.TBByteText = new System.Windows.Forms.TextBox();
this.TBCRCText = new System.Windows.Forms.TextBox();
this.LBByteText = new System.Windows.Forms.Label();
this.LBCRCText = new System.Windows.Forms.Label();
this.btnCrc = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// TBByteText
//
this.TBByteText.Location = new System.Drawing.Point(126, 27);
this.TBByteText.Name = "TBByteText";
this.TBByteText.Size = new System.Drawing.Size(277, 21);
this.TBByteText.TabIndex = 0;
this.TBByteText.Text = "01";
//
// TBCRCText
//
this.TBCRCText.Location = new System.Drawing.Point(126, 68);
this.TBCRCText.Name = "TBCRCText";
this.TBCRCText.Size = new System.Drawing.Size(277, 21);
this.TBCRCText.TabIndex = 1;
//
// LBByteText
//
this.LBByteText.AutoSize = true;
this.LBByteText.Location = new System.Drawing.Point(65, 27);
this.LBByteText.Name = "LBByteText";
this.LBByteText.Size = new System.Drawing.Size(41, 12);
this.LBByteText.TabIndex = 2;
this.LBByteText.Text = "原报文";
//
// LBCRCText
//
this.LBCRCText.AutoSize = true;
this.LBCRCText.Location = new System.Drawing.Point(65, 77);
this.LBCRCText.Name = "LBCRCText";
this.LBCRCText.Size = new System.Drawing.Size(47, 12);
this.LBCRCText.TabIndex = 3;
this.LBCRCText.Text = "CRC报文";
//
// btnCrc
//
this.btnCrc.Location = new System.Drawing.Point(126, 140);
this.btnCrc.Name = "btnCrc";
this.btnCrc.Size = new System.Drawing.Size(75, 23);
this.btnCrc.TabIndex = 4;
this.btnCrc.Text = "计算CRC";
this.btnCrc.UseVisualStyleBackColor = true;
this.btnCrc.Click += new System.EventHandler(this.btnCrc_Click);
//
// CRCForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(451, 450);
this.Controls.Add(this.btnCrc);
this.Controls.Add(this.LBCRCText);
this.Controls.Add(this.LBByteText);
this.Controls.Add(this.TBCRCText);
this.Controls.Add(this.TBByteText);
this.Name = "CRCForm";
this.Text = "CRC校验";
this.ResumeLayout(false);
this.PerformLayout();

}

#endregion

private System.Windows.Forms.TextBox TBByteText;
private System.Windows.Forms.TextBox TBCRCText;
private System.Windows.Forms.Label LBByteText;
private System.Windows.Forms.Label LBCRCText;
private System.Windows.Forms.Button btnCrc;
}
}

 

标签:C#,校验,System,CRC,Windows,new,bRet,btnCrc,Drawing
From: https://www.cnblogs.com/530263009QQ/p/18340087

相关文章

  • Smart Contract Audit路线
    个人微博:https://weibo.com/u/2434823180Blog: https://apenote.github.iovx:apedamoon 一、区块链基础1.1、掌握以太坊1.2、pow和pos 二、solidity基础2.1、Solidity文件;2.2、智能合约编程;2.3、Secureumsolidity101; 2.4、Sec......
  • 实战:深入了解JDBC和分享JDBCUtil
    Java数据库连接(JDBC)是一个功能强大的API,它弥补了Java应用程序与关系数据库之间的差距。通过利用JDBC,您可以无缝地与数据库交互以存储、检索和操作数据。但是,要有效使用JDBC,需要遵循最佳实践,以确保代码的最佳性能、安全性和可维护性。正如我之前提到的观点,学习一个新......
  • 谷粒商城实战笔记-115-全文检索-ElasticSearch-进阶-bool复合查询
    文章目录1,must2,mustnot3,should1,must{"query":{"bool":{"must":[{"match":{"gender":"M"}},{"matc......
  • 谷粒商城实战笔记-118-全文检索-ElasticSearch-进阶-aggregations聚合分析
    文章目录一,基本概念主要聚合类型二,实战1,搜索address中包含mill的所有人的年龄分布以及平均年龄,但不显示这些人的详情2,按照年龄聚合,并且请求每个年龄的平均薪资Elasticsearch的聚合(Aggregations)功能允许用户对数据集进行聚合分析,从而获得数据的摘要信息。聚......
  • 塔子哥的最短区间-小米2023笔试(codefun2000)
    题目链接塔子哥的最短区间-小米2023笔试(codefun2000)题目内容塔子哥有一个长度为n的数组a和长度为m的数组b,下标均从1开始。现在,塔子哥想让你找出一个最短的区间l,r,这个区间中数x的数量至少出现了b[x]次。输入描述第一行,两个整数n,m(......
  • docker基本命令
    目录Docker基本命令介绍引言1.Docker基本命令1.1镜像相关命令1.1.1搜索镜像1.1.2拉取镜像1.1.3列出镜像1.1.4删除镜像1.2容器相关命令1.2.1创建并运行容器1.2.2列出容器1.2.3停止容器1.2.4启动容器1.2.5删除容器1.3其他常用命令1.3.1查看容器日志1.3.2......
  • 科普文:万字细说微服务及其框架Netflix,Spring Cloud,Spring Cloud Alibaba梳理
    概叙微服务(Microservices)是一种软件架构风格,它将单一的应用程序拆分为多个小的服务,每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能,具有自己的数据存储,并且通过轻量级的通信机制(如HTTP或消息队列)与其他服务进行交互。微服务发展到现在,不仅仅只是服务治理,......
  • 衡庐浅析·C语言程序设计·第四章·数组
        本文适用于大学的期中期末考试、专升本(专接本、专插本)考试、408等考研预科。如有相关题目疑问或建议欢迎在评论区进行互动。    转载请标明出处。在深入学习C语言的数组之前,我们先回顾一下C语言的三大基本结构:顺序结构、选择结构和循环结构。这些结构构成......
  • Burp Suite Professional 2024.7 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.7formacOSx64&ARM64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:https://sysin.org/blog/burp-suite-pro-mac/,查看最新版。原创作品,转载请保留出处。BurpSuiteProfessionalTheworld’s#1webpenetrati......
  • m3u8下载工具N_m3u8DL-CLI的图形界面增强版
    摘自:https://zhuanlan.zhihu.com/p/672615148 简介(仅windows)N_m3u8DL-CLI是个非常方便的开源免费m3u8下载工具,自带一个叫SimpleGUI的简单图形界面。但是这个图形界面工具,太过简单,连任务列表都没有。所以,这里二次开发,增加了任务列表功能。新增的所有功能,请在项目页面查看详......