Калькулятор контрольных сумм - C#
Формулировка задачи:
нужно окно в которое я ввожу данные, стартовое слово, жму кнопку и мне выводится контрольная сумма СRC 16 CCITT. в чем проблема, очень туго понимаю си шарп. нашел в инете миллион различных алгоритмов, но так и не понял как ввести данные для их расчета. остановился на таком варианте.
что еще понял что это не crc16 ccitt это реверсивный метод. если можете поправьте и помогите.
using System; public class Crc16 { const ushort polynomial = 0xA001; ushort[] table = new ushort[256]; public ushort ComputeChecksum(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 byte[] ComputeChecksumBytes(byte[] bytes) { ushort crc = ComputeChecksum(bytes); return BitConverter.GetBytes(crc); } public Crc16() { 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; } } }
Решение задачи: «Калькулятор контрольных сумм»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CRC_TestProgram { public static class Crc16 { //Метод расчета CRC public static uint GetCRC16(uint polynom, uint startValue, byte[] data) { uint crc = startValue; for (int i = 0; i < data.Length; i++) { crc ^= (uint)(data[i] & 0xff); for (int j = 0; j < 8; j++) { if ((crc & 1) != 0) { crc = (crc >> 1) ^ polynom; } else { crc = crc >> 1; } } } return crc; } //Метод расчета LRC public static short CalculateLrc(byte[] data) { if (data == null) { throw new ArgumentNullException("data"); } short num = 0; foreach (byte num2 in data) { num = (short)(num + num2); } return (short)((num ^ 0xffff) + 0); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д