Да. Росс Уильямс написал excellent tutorial on CRCs, в котором он определяет канонический набор параметров для определения CRC. Грег Кук сделал это и создал list of known CRCs, который использует эти параметры со стандартным форматом и набором имен в одной строке для каждого CRC. Вот пример описания с этого сайта, что является, вероятно, наиболее распространенной CRC:
width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xcbf43926 name="CRC-32"
Значение check
является CRC в девять байт строки ASCII символов «123456789».
Я написал crcany code, который считывает эти строки параметров и вычисляет CRC, используя их, применяя побитовые, байт-мудрые и текстовые алгоритмы. В комплект поставки crcany входит crcgen, который генерирует код C для любого CRC.
Этот набор параметров не говорит вам, как поставить CRC в поток байтов. Это соглашение формата данных, а не самого CRC. Таким образом, вам остается сказать, должны ли байты слова CRC храниться в потоке в порядке little-endian или big-endian, а также где они идут и что вычисляется CRC.