Прокомментировать циклический избыточный код - C#

Узнай цену своей работы

Формулировка задачи:

Please объясните как строится таблица и как вычисляется crc?
  public static uint CalculateCRC(System.IO.Stream stream)
        {
            const int buffer_size = 1024;
            const uint POLYNOMIAL = 0xEDB88320;
 
            uint result = 0xFFFFFFFF;
            uint Crc32;
 
            byte[] buffer = new byte[buffer_size];
            uint[] table_CRC32 = new uint[256];
 
            unchecked
            {
                //
                // Инициалиазация таблицы
                //
                for (int i = 0; i < 256; i++)
                {
                    Crc32 = (uint)i;
 
                    for (int j = 8; j > 0; j--)
                    {
                        if ((Crc32 & 1) == 1)
                            Crc32 = (Crc32 >> 1) ^ POLYNOMIAL;
                        else
                            Crc32 >>= 1;
                    }
 
                    table_CRC32[i] = Crc32;
                }
 
                //
                // Чтение из буфера
                //
                int count = stream.Read(buffer, 0, buffer_size);
 
                //
                // Вычисление CRC
                //
                while (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        result = ((result) >> 8)
                            ^ table_CRC32[(buffer[i])
                            ^ ((result) & 0x000000FF)];
                    }
 
                    count = stream.Read(buffer, 0, buffer_size);
                }
            }
 
            return ~result;
        }
    }
}

Решение задачи: «Прокомментировать циклический избыточный код»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace CRC_TestProgram
{
    public enum Crc16Mode : ushort { Standard = 0xA001, CcittKermit = 0x8408 }
 
    public class Crc16Ccitt
    {
        static ushort[] table = new ushort[256];
 
        public ushort ComputeChecksum(params byte[] bytes)
        {
            ushort crc = 0;
            for (int i = 0; i < bytes.Length; ++i)
            {
                byte index = (byte)(crc ^ bytes[i]);
                crc = (ushort)((crc >> 8) ^ table[index]);
            }
            return crc;
        }
 
        public Crc16Ccitt(Crc16Mode mode)
        {
            ushort polynomial = (ushort)mode;
            ushort value;
            ushort temp;
            for (ushort i = 0; i < table.Length; ++i)
            {
                value = 0;
                temp = i;
                for (byte j = 0; j < 8; ++j)
                {
                    if (((value ^ temp) & 0x0001) != 0)
                    {
                        value = (ushort)((value >> 1) ^ polynomial);
                    }
                    else
                    {
                        value >>= 1;
                    }
                    temp >>= 1;
                }
                table[i] = value;
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5