C#计算LRC(纵向冗余校验)
C# Calculate LRC (Longitudinal Redundancy Check)
我一直在研究这个问题,所有的 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;
}
当前输出显示"Calculated LRC = 33"。然而,正确答案是“30”。任何人都可以发现这有什么问题吗?
任何帮助都会很棒!
经过多次测试,确认LRC在LRC计算时应该包含ETX,排除STX。
我一直在研究这个问题,所有的 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;
}
当前输出显示"Calculated LRC = 33"。然而,正确答案是“30”。任何人都可以发现这有什么问题吗?
任何帮助都会很棒!
经过多次测试,确认LRC在LRC计算时应该包含ETX,排除STX。