#CRC校验
因工作需要所以用#写了一个CRC的16位校验,代码是参照标准的modbus协议里面的定义写的亲测都是可以正常校验的所以放心使用吧。
下面废话不说了直接上代码,代码也不多直接看就行
/// <summary>
/// CRC校验
/// </summary>
/// <param name="data">校验数据</param>
/// <returns>高低8位</returns>
public static string CRCCalc(string data)
{
string[] datas = data.Split(' ');
List<byte> bytedata = new List<byte>();
foreach (string str in datas)
{
bytedata.Add(byte.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier));
}
byte[] crcbuf = bytedata.ToArray();
//计算并填写CRC校验码
int crc = 0xffff;
int len = crcbuf.Length;
for (int n = 0; n < len; n++)
{
byte i;
crc = crc ^ crcbuf[n];
for (i = 0; i < 8; i++)
{
int TT;
TT = crc & 1;
crc = crc >> 1;
crc = crc & 0x7fff;
if (TT == 1)
{
crc = crc ^ 0xa001;
}
crc = crc & 0xffff;
}
}
string[] redata = new string[2];
redata[1] = Convert.ToString((byte)((crc >> 8) & 0xff), 16);
redata[0] = Convert.ToString((byte)((crc & 0xff)), 16);
return FormatHEX(redata[0]) + " " + FormatHEX(redata[1]);
}
就那么点东西。 最后的FormatHEX 这个你们不需要的 。你们直接拿 redata里面的内容就可以了。(PS:看到有人在评论中指出 这里补充一下)