Реализация CRC-4 в C # - PullRequest
       16

Реализация CRC-4 в C #

3 голосов
/ 02 декабря 2009

Я искал в сети реализацию C # 4-битной проверки циклическим избыточным кодом (CRC-4-ITU), но пока мне не удалось.

Есть ли кто-нибудь, кто может дать мне эталонную реализацию CRC-4-ITU? Предпочтительно со стандартным полиномом, если есть стандартный полином (я прочитал спецификацию , на которую указывает википедия , как спецификацию CRC4, не найдя определения полинома).

Я также был бы очень признателен за набор тестов или тестовые данные для проверки реализации CRC4.

Спасибо!

1 Ответ

3 голосов
/ 02 декабря 2009

В статье Циклическая избыточность в Википедии говорится, что полином равен x ^ 4 + x + 1. Существует также довольно хорошее описание того, как вычисляется контрольная сумма.

Вот алгоритм для CRC16. Я знаю, что это не то, что вы просили, но адаптировать его для 4 битов должно быть относительно просто.

   public ushort calculate(byte[] bytes)
    {
        int crc = 0xFFFF; // initial value
        // loop, calculating CRC for each byte of the string
        for (int byteIndex = 0; byteIndex < bytes.Length; byteIndex++)
        {
            ushort bit = 0x80; // initialize bit currently being tested
            for (int bitIndex = 0; bitIndex < 8; bitIndex++)
            {
                bool xorFlag = ((crc & 0x8000) == 0x8000);
                crc <<= 1;
                if (((bytes[byteIndex] & bit) ^ (ushort)0xff) != (ushort)0xff)
                {
                    crc = crc + 1;
                }
                if (xorFlag)
                {
                    crc = crc ^ 0x1021;
                }
                bit >>= 1;
            }
        }
        return (ushort)crc;
    }

http://www.experts -exchange.com / Программирование / Языки / C_Sharp / Q_24775723.html

Также есть руководство по вычислению контрольных сумм:

http://www.ross.net/crc/download/crc_v3.txt

"Все, что вы хотели знать об алгоритмах CRC, но боялись просить страха, что ошибки в вашем понимании могут быть обнаружены. "

...