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.