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;
}
}
public bool CheckCRC(int ByteLength, byte[] imbuffer)
{
int i, j, k = 0;
byte hi, lo, c1, c2;
hi = 0xff;
lo = 0xff;
if (ByteLength < 4)
{
return false;
}
for (i = 0; i < (ByteLength - 2); i++)
{
lo = (byte)(lo ^ imbuffer[k]);
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);
}
}
k++;
}
c1 = imbuffer[k];
k++;
c2 = imbuffer[k]; if ((c1 == lo) && (c2 == hi))
{
return true;
}
else
{
return false;
}
}
00 06 0C 23 00 01 80 85