
这是环保厅要求的CRC校验,之前试过好多种结果都不对,正确结果abc最后算出来是D701,求人帮忙给写一个,公司用的是C语言写的,现在要改C#项目,用DLL有一些问题
------解决思路----------------------
public void GetCheck(int ByteLength, ref byte[] ombuffer, string CheckMode)
{
int i, j = 0;
byte hi, lo, c1, c2;
switch (CheckMode)
{
case "CRC16":
hi = 0xff;
lo = 0xff;
for (i = 0; i < ByteLength; i++)
{
lo = (byte)(lo ^ ombuffer[i]);
for (j = 0; j < 8; j++)
{
c1 = lo;
c2 = hi;
lo = (byte)(lo >> 1);
hi = (byte)(hi >> 1);
if ((c2 & 0x01) != 0)
{
lo = (byte)(lo
------解决思路----------------------
0x80);
}
if ((c1 & 0x01) != 0)
{
hi = (byte)(hi ^ 0xa0);
lo = (byte)(lo ^ 0x01);
}
}
}
ombuffer[ByteLength] = lo;
ombuffer[ByteLength + 1] = hi;
break;
case "SUM":
lo = 0x00;
for (i = 0; i < ByteLength; i++)
{
lo += ombuffer[i];
}
ombuffer[ByteLength] = lo;
break;
}
}
这里是CRC16和SUM校验的算法