CRC16能不能靠一下方法获得验证码?public UInt16 CRC16Code(byte[] pcrc)
{
UInt16 crc16 = 0;
for (int i = 0; i < pcrc.Length; ++i)
{
crc16 = (UInt16)((crc16 << 8) ^ CRC16Table[((crc16 >> 8) ^ pcrc[i])]);
}
return crc16;
}
{
UInt16 crc16 = 0;
for (int i = 0; i < pcrc.Length; ++i)
{
crc16 = (UInt16)((crc16 << 8) ^ CRC16Table[((crc16 >> 8) ^ pcrc[i])]);
}
return crc16;
}
/// <summary>
/// CRC16位校验
/// </summary>
/// <param name="crc_array">校验数据</param>
/// <returns></returns>
public uint GetCRC16(Byte[] crc_array)
{
uint i, j;
uint modbus_crc; modbus_crc = 0xffff; for (i = 0; i < crc_array.Length - 2; i++)
{
modbus_crc = (modbus_crc & 0xFF00) | ((modbus_crc & 0x00FF) ^ crc_array[i]);
for (j = 1; j <= 8; j++)
{
if ((modbus_crc & 0x01) == 1)
{
modbus_crc = (modbus_crc >> 1);
modbus_crc ^= 0XA001;
}
else
{
modbus_crc = (modbus_crc >> 1);
}
}
} return modbus_crc;
}1、校验的数据是指接收到的全部数据byte[],包括最后2位校验位,你看循环把长度-2了的,
2、返回10进制数,然后你转换成16进制,再和最后2个校验位进行比较就行了