Немного предыстории для тех, кто придет к этому вопросу и задается вопросом о добавлении CRC.
Если CRC правильно , добавленный к сообщению о том, что он является CRC, и в сообщении или CRC нет ошибок, CRC всего этого будет константа зависит только от определения этого CRC.
К правильно добавить CRC требует осторожности в порядке следования битов. Для общего определения CRC, предоставленного crcmod
, если rev
ложно, то сначала должны быть добавлены биты наиболее значащие. Если rev
истинно, то сначала необходимо добавить биты наименее значащие. Для байтово-ориентированных сообщений это, во-первых, означает, что ширина CRC должна быть кратна восьми битам (что, кстати, все, что разрешено crcmod
), и что CRC добавляется в порядке с прямым порядком байтов или порядок с прямым порядком байтов соответственно.
Результирующая константа не всегда равна нулю, в зависимости от определения CRC. Это равно нулю, если значение xorOut
для CRC равно нулю. В противном случае константа является CRC n нулевых битов, где n - ширина CRC, а начальное значение CRC равно нулю ( не initCrc
). Например, для стандарта CRC-32 CRC-32 сообщения с его CRC-32, добавленным в порядке с прямым порядком байтов, всегда равен 0x2144df1c
.
Для этого конкретного вопроса CRC добавляется в порядке с прямым порядком байтов, поэтому 31 c3
, и CRC полученного сообщения + CRC тогда равен нулю.