public static byte[] crc(byte[] data)
{//crc校验Byte CRC16Lo = 0xFF;// CRC寄存器
Byte CRC16Hi = 0xFF;
Byte CL = 0x01; // '多项式码&HA001
Byte CH = 0xA0;
Byte SaveHi, SaveLo;for (int intI = 0; intI < data.Length; intI++)
{CRC16Lo = Convert.ToByte(CRC16Lo ^ data[intI]); //每一个数据与CRC寄存器进行异或
for (int flag = 0; flag < 7; flag++)
{
SaveHi = CRC16Hi;
SaveLo = CRC16Lo;
CRC16Hi = Convert.ToByte(CRC16Hi / 2); // '高位右移一位
CRC16Lo = Convert.ToByte(CRC16Lo / 2); // '低位右移一位
if ((SaveHi & 0x01) == 0x01)
{ //'如果高位字节最后一位为1
CRC16Lo = Convert.ToByte(CRC16Lo | 0x80); //'则低位字节右移后前面补1
} //'否则自动补0
if (Convert.ToByte(SaveLo &0x01) == 0x01)
{ //如果CRC16的LSB(最低位)为1,则与多项式码进行异或
CRC16Hi = Convert.ToByte(CRC16Hi ^ CH);
CRC16Lo = Convert.ToByte(CRC16Lo ^ CL);
} }
} byte[] bytCRCResult = new byte[2];
bytCRCResult[0] = CRC16Hi;
bytCRCResult[1] = CRC16Lo;
return bytCRCResult;}请问高手那里有错!
{//crc校验Byte CRC16Lo = 0xFF;// CRC寄存器
Byte CRC16Hi = 0xFF;
Byte CL = 0x01; // '多项式码&HA001
Byte CH = 0xA0;
Byte SaveHi, SaveLo;for (int intI = 0; intI < data.Length; intI++)
{CRC16Lo = Convert.ToByte(CRC16Lo ^ data[intI]); //每一个数据与CRC寄存器进行异或
for (int flag = 0; flag < 7; flag++)
{
SaveHi = CRC16Hi;
SaveLo = CRC16Lo;
CRC16Hi = Convert.ToByte(CRC16Hi / 2); // '高位右移一位
CRC16Lo = Convert.ToByte(CRC16Lo / 2); // '低位右移一位
if ((SaveHi & 0x01) == 0x01)
{ //'如果高位字节最后一位为1
CRC16Lo = Convert.ToByte(CRC16Lo | 0x80); //'则低位字节右移后前面补1
} //'否则自动补0
if (Convert.ToByte(SaveLo &0x01) == 0x01)
{ //如果CRC16的LSB(最低位)为1,则与多项式码进行异或
CRC16Hi = Convert.ToByte(CRC16Hi ^ CH);
CRC16Lo = Convert.ToByte(CRC16Lo ^ CL);
} }
} byte[] bytCRCResult = new byte[2];
bytCRCResult[0] = CRC16Hi;
bytCRCResult[1] = CRC16Lo;
return bytCRCResult;}请问高手那里有错!
byte[] crcValue = new byte[6];
crcValue[0] = 5;
crcValue[1] = 3;
crcValue[2] = 0;
crcValue[3] = 60;
crcValue[4] = 0;
crcValue[5] = 60;
byte[] crcRet = new byte[2];
crcRet = crc16.crc(crcValue);