C#串口通讯CRC校验码计算类
来源:互联网 发布:种子php文件怎么打开 编辑:程序博客网 时间:2024/05/16 14:03
来源:http://blog.csdn.net/kuzhuxuan/archive/2006/05/30/763300.aspx
using System;
namespace BQ.Terminal.Gateway
{
/// <summary>
/// 消息CRC校验算法
/// </summary>
public class CRC
{
//private int key = 0x11021H;
public CRC()
{
}
public static int GetKey(byte[] data)
{
int count = data.Length;
byte[] buf = new byte[data.Length+2];
data.CopyTo(buf,0);
int ptr = 0;
int i = 0;
int crc = 0;
byte crc1,crc2,crc3;
crc1 = buf[ptr++];
crc2 = buf[ptr++];
buf[count] = 0;
buf[count+1] = 0;
while(--count >= 0)
{
crc3 = buf[ptr++];
for(i =0;i<8;i++)
{
if(((crc1&0x80)>>7) == 1)//判断crc1高位是否为1
{
crc1 = (byte)(crc1 << 1); //移出高位
if(((crc2&0x80)>>7) == 1)//判断crc2高位是否为1
{
crc1 = (byte)(crc1 | 0x01);//crc1低位由0变1
}
crc2 = (byte)(crc2 << 1);//crc2移出高位
if(((crc3&0x80)>>7) == 1) //判断crc3高位是否为1
{
crc2 = (byte)(crc2 | 0x01); //crc2低位由0变1
}
crc3 = (byte)(crc3 << 1);//crc3移出高位
crc1 = (byte)(crc1 ^ 0x10);
crc2 = (byte)(crc2 ^ 0x21);
}
else
{
crc1 = (byte)(crc1 << 1); //移出高位
if(((crc2&0x80)>>7) == 1)//判断crc2高位是否为1
{
crc1 = (byte)(crc1 | 0x01);//crc1低位由0变1
}
crc2 = (byte)(crc2 << 1);//crc2移出高位
if(((crc3&0x80)>>7) == 1) //判断crc3高位是否为1
{
crc2 = (byte)(crc2 | 0x01); //crc2低位由0变1
}
crc3 = (byte)(crc3 << 1);//crc3移出高位
}
}
}
crc = (int)((crc1<<8) + crc2);
return crc;
}
}
}
{
/// <summary>
/// 消息CRC校验算法
/// </summary>
public class CRC
{
//private int key = 0x11021H;
public CRC()
{
}
public static int GetKey(byte[] data)
{
int count = data.Length;
byte[] buf = new byte[data.Length+2];
data.CopyTo(buf,0);
int ptr = 0;
int i = 0;
int crc = 0;
byte crc1,crc2,crc3;
crc1 = buf[ptr++];
crc2 = buf[ptr++];
buf[count] = 0;
buf[count+1] = 0;
while(--count >= 0)
{
crc3 = buf[ptr++];
for(i =0;i<8;i++)
{
if(((crc1&0x80)>>7) == 1)//判断crc1高位是否为1
{
crc1 = (byte)(crc1 << 1); //移出高位
if(((crc2&0x80)>>7) == 1)//判断crc2高位是否为1
{
crc1 = (byte)(crc1 | 0x01);//crc1低位由0变1
}
crc2 = (byte)(crc2 << 1);//crc2移出高位
if(((crc3&0x80)>>7) == 1) //判断crc3高位是否为1
{
crc2 = (byte)(crc2 | 0x01); //crc2低位由0变1
}
crc3 = (byte)(crc3 << 1);//crc3移出高位
crc1 = (byte)(crc1 ^ 0x10);
crc2 = (byte)(crc2 ^ 0x21);
}
else
{
crc1 = (byte)(crc1 << 1); //移出高位
if(((crc2&0x80)>>7) == 1)//判断crc2高位是否为1
{
crc1 = (byte)(crc1 | 0x01);//crc1低位由0变1
}
crc2 = (byte)(crc2 << 1);//crc2移出高位
if(((crc3&0x80)>>7) == 1) //判断crc3高位是否为1
{
crc2 = (byte)(crc2 | 0x01); //crc2低位由0变1
}
crc3 = (byte)(crc3 << 1);//crc3移出高位
}
}
}
crc = (int)((crc1<<8) + crc2);
return crc;
}
}
}
- C#串口通讯CRC校验码计算类
- Modbus-RTU通讯协议中CRC校验码的计算步骤
- Modbus-RTU通讯协议中CRC校验码的计算步骤
- CRC计算校验码过程
- 如何计算CRC校验码
- 计算CRC校验码
- 查表法计算CRC校验码(代码)
- 循环冗余校验码计算CRC
- C#串口通讯类
- C#串口通讯类
- 计算ModBus CRC 校验码(delphi实现)
- C# XOR CRC16 校验码计算类
- C# XOR CRC16 校验码计算类
- UVa 128 Software CRC (模计算&CRC循环冗余校验码)
- C# Crc 取循环冗余校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验源码分析
- 免激活Vista并合法使用1年的方法
- CSDN初接触
- cmm 短评
- 文献阅读
- C#串口通讯CRC校验码计算类
- 统计在线人数Web
- .NET 提取网页中的超链接
- SAX解析XML
- 端口讲解
- 通过WebService 上传和下载文件
- SAX和 DOM解析xml文件的区别(转)
- 当世事都成了粪土后,金钱却还是那么耀眼!
- 提高数据库性能的解决方案