Контрольная сумма 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.