2014-10-29 3 views
1

crcmod «s documentation гласит:„.. xorOut - Конечное значение для XOR с вычисленным значением CRC Используется некоторыми алгоритмами CRC По умолчанию ноль“crcmod в не ведет себя так же, как вручную XOR-

Я ожидал от этого описания, что установка этого параметра на ненулевое число (скажем, 0xFFFFFFFF) эквивалентна принятию CRC с нулевым параметром, а затем его координату с помощью этого номера с помощью оператора ^.

Это не то поведение, которое я вижу. Что я ошибался? Каково фактическое поведение параметра xorOut?

Вот какой-то код прямо из моего интерактивного переводчика. Я ожидал, что последняя строка будет True.

>>> import crcmod 
>>> crc32_func_noxor = crcmod.mkCrcFun(0x104c11db7, initCrc=0, rev=True, xorOut=0) 
>>> crc32_func_xor = crcmod.mkCrcFun(0x104c11db7, initCrc=0, rev=True, xorOut=0xffffffff) 
>>> crc32_func_noxor('12345678'.decode('hex'))^0xffffffff==crc32_func_xor('12345678'.decode('hex')) 
False 

ответ

2

Из документации:

initCrc - Начальное значение, используемое для запуска расчета CRC. Это начальное значение должно быть начальным значением регистра сдвига, если оно отменено, если в используется обратный алгоритм, а затем XORed с конечным значением XOR. Это эквивалентно результату CRC, который алгоритм должен возвращать для строки нулевой длины длиной . Значение по умолчанию для всех битов установлено, потому что начальное значение учитывает ведущие нулевые байты. Начиная с нуля проигнорирует все ведущие нулевые байты.

Это означает, что если вы не укажете initCrc, он будет инициализировать регистр к конечному значению XOR, xorOut. Если вы хотите получить результат только, исключите-оформить результат, тогда вы можете установить initCrc на номер xorOut.

+0

Переопределение функции «-xor» с initCrc, равным xorOut, ведет себя так, как я ожидал. Пример сравнения теперь возвращает значение True. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^