C#计算LRC(纵向冗余校验)

时间:2015-03-15 04:04:57

标签: c# algorithm serial-port

我到处都在研究这个问题,所有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;
    }

当前输出显示&#34;计算LRC = 33&#34;。但是,正确的答案是&#34; 30&#34;。任何人都可以发现这有什么问题吗?

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

经过多次测试,确认LRC应包括ETX并在LRC计算期间排除STX。