Прокомментировать циклический избыточный код - 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; } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д