C# CRC校验类

public class CRC
{
 
///
/// CRC码计算,返回数组中,0为低位,1为高位
///

///
///
public static byte[] CRC16(byte[] data)
{
byte CRC16Lo = 0;
byte CRC16Hi = 0;
byte CL = 0;
byte CH = 0;
byte SaveHi = 0;
byte SaveLo = 0;
// short i = 0;
short Flag = 0;
byte[] ReturnData = new byte[1 + 1];
// CRC寄存器
// 多项式码&HA001
CRC16Lo = (byte)0xFF;
CRC16Hi = (byte)0xFF;
CL = (byte)0x1;
CH = (byte)0xA0;
for (int i = 0; i <= data.Length - 3; i++)
{
CRC16Lo = Convert.ToByte(CRC16Lo ^ data[i]);
// 每一个数据与CRC寄存器进行异或
for (Flag = (short)0;
Flag <= 7.0;
Flag = Convert.ToInt16(Flag + 1))
{
SaveHi = CRC16Hi;
SaveLo = CRC16Lo;
CRC16Hi = Convert.ToByte(CRC16Hi / 2);
// 高位右移一位
CRC16Lo = Convert.ToByte(CRC16Lo / 2);
// 低位右移一位
if ((SaveHi & 0x1) == 0x1)
{
// 如果高位字节最后一位为1
CRC16Lo = Convert.ToByte(CRC16Lo | 0x80);
// 则低位字节右移后前面补1
}
// 否则自动补0
if ((SaveLo & 0x1) == 0x1)
{
// 如果LSB为1,则与多项式码进行异或
CRC16Hi = Convert.ToByte(CRC16Hi ^ CH);
CRC16Lo = Convert.ToByte(CRC16Lo ^ CL);
}
// Debug.Print Str(i) & ":", CRC16Lo, CRC16Hi
}
// Debug.Print CRC16Lo, CRC16Hi
}
ReturnData[0] = CRC16Lo;
// CRC低位
ReturnData[1] = CRC16Hi;
// CRC高位
return ReturnData;
}
}

你可能感兴趣的:(.Net)