Калькулятор контрольных сумм - C#

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

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

нужно окно в которое я ввожу данные, стартовое слово, жму кнопку и мне выводится контрольная сумма СRC 16 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;
        }
    }
}
что еще понял что это не crc16 ccitt это реверсивный метод. если можете поправьте и помогите.

Решение задачи: «Калькулятор контрольных сумм»

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);
        }
    }
}

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


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

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

9   голосов , оценка 3.889 из 5
Похожие ответы