Я извиняюсь, а вы на каком языке пишете программу? И чем вас не устроил
Пример программы табличного (быстрого) расчёта стандартного (ARC) CRC-16 на языке Си, приведенный ранее в указанной
статье из Википедии? Там всего лишь один параметр (начальное/промежуточное значение CRC) добавить (вынести как аргумент функции) нужно.
Код
unsigned short Crc16(unsigned char * pcBlock, unsigned short len, unsigned short crc)
{ while (len--)
crc = (crc >> 8) ^ Crc16Table[(crc & 0xFF) ^ *pcBlock++];
return crc;
}
Естественно, что таблицу CRC из того примера тоже нужно включать в исходник.
Допустим пакет располагается у вас а массиве который объявлен как
Код
unsigned char UDPpocketArray[1043];
Размер вашего пакета 11:00:48:25:be:0a:5a:0a:7f:ff:ff:ff:00:03:20:00:24:cd:ff:00 - 20 байт.
Тогда вызов функции подсчета CRC16 будет
Код
crc=Crc16(&UDPpocketArray[0], 20, 0xFFFF);
Если в результате после вызова функции переменная crc имеет значение 0, то пакет валидный.