Контрольная сумма CRC с использованием long (64 бит)

Я проверил различные реализации CRC64. Например, этой, этой и этой. Проблема со всем этим заключается в том, что они работают с байтами. Однако, на 64-битной системе, я хотел бы работать с long (8 байт). Таким образом, мне нужно будет повторять меньше. Например, для данных 128 байт, используя byte, Мне нужно повторить 128 раз, в то время как с long, Мне нужно было бы повторить только 16 раз.

есть ли Реализация CRC64, использующая long или даже размер больше, чем байт? Можно ли изменить эти схемы?

1 ответов


расчет CRC использует трюк, чтобы избежать необходимости обрабатывать данные бит за битом: он использует таблицу поиска, которая позволяет обрабатывать несколько битов одновременно.

обработка n bits сразу требует таблицы поиска размера 2^n. Реализации, которые вы связали, читают 1 байт (8 бит) за раз, и действительно, все они используют таблицу поиска размером 256 == 2^8.

обработка 64 бит за раз потребует таблицы подстановки размера 2^64, что нецелесообразно. Вот почему общие реализации CRC выполняют обработку 1 байта за раз.

хотя можно обрабатывать 2 байта за раз с использованием массива 65536-entry, это, вероятно, окажет негативное влияние на производительность из-за использования большего объема кэш-памяти CPU.