Добрый день. Раньше программировал только для Атолов.
Подскажите пожалуйста как вычислить CRC для команды. Никак не могу понять что означает следующее:
"CRC16-CCITT
полином 0x1021.
Рассчитывается по
полям сообщения
2-4"
Если не трудно покажите пожалуйста пример команды для «Информация о версии ПО ККТ», код сообщения 45H.
Спасибо.
Меркурий 119Ф Как вычисляется CRC?
Re: Меркурий 119Ф Как вычисляется CRC?
Вот так вычисляю я:
Код: Выделить всё
unsigned short Crc16Ccitt1021(unsigned char *pcBlock, unsigned short len){
unsigned short crc = 0xFFFF;
unsigned char i;
while( len-- )
{
crc ^= *pcBlock++ << 8;
for( i = 0; i < 8; i++ )
crc = crc & 0x8000 ? ( crc << 1 ) ^ 0x1021 : crc << 1;
}
return crc;
}
Re: Меркурий 119Ф Как вычисляется CRC?
Похоже я понял. Спасибо большое
Re: Меркурий 119Ф Как вычисляется CRC?
Код: Выделить всё
ushort crc = 0xFFFF;
ushort polynomial = 0x1021;
byte[] bytes = data.ToArray();
foreach (var b in bytes)
{
for (int i = 0; i < 8; i++)
{
bool bit = ((b >> (7 - i) & 1) == 1);
bool c15 = ((crc >> 15 & 1) == 1);
crc <<= 1;
if (c15 ^ bit) crc ^= polynomial;
}
crc &= 0xffff;
}