C# Рассчитать LRC (продольная проверка избыточности)

Я исследовал это повсюду, и вся реализация LRC, кажется, не дает мне правильный ответ. Потратив на это несколько дней, я решил разместить здесь свой код, чтобы узнать, сможет ли кто-нибудь еще определить проблему.

Вот код (C#)

        //Input Data = "31303030315E315E31303030325E315E31303030375E39395E31303032325E36353631335E"
        //LRC Answer = "30"
        private static string LRC(string Data)
        {
            int checksum = 0;
            foreach (char c in GetStringFromHex(Data))
            {
                checksum ^= Convert.ToByte(c);
            }


            string hex = checksum.ToString("X2");

            Console.WriteLine("Calculated LRC = " + hex);

            return hex;
        }





    //Supporting Function used in LRC function
    private static string GetStringFromHex(string s)
    {
        string result = "";
        string s2 = s.Replace(" ", "");
        for (int i = 0; i < s2.Length; i += 2)
        {
            result += Convert.ToChar(int.Parse(s2.Substring(i, 2), System.Globalization.NumberStyles.HexNumber));
        }
        return result;
    }

Токовый выход показывает "Вычислено LRC = 33". Однако правильный ответ - "30". Кто-нибудь может определить, что с этим не так?

Любая помощь будет фантастической!

1 ответ

Решение

После нескольких испытаний подтверждается, что LRC должен включать ETX и исключать STX во время расчета LRC.

Другие вопросы по тегам