Вычисление контрольной суммы кадра C#
Hii guys. I have a problem. Can you help me. There is an article on the elimination. According to this article I can not find Checksum. Here are a few examples and articles;
Статьи:
2.1 кадрирование
Каждая передача данных происходит в пределах кадра. Каждый пакет данных имеет следующую структуру:
&ЛТ;компания&ГТ; ФЛ ФН в Интернет [сведения] контрольная сумма &ЛТ;ЕТХ&ГТ;
<STX> 1 байт (02hex) Начало кадра
FL 3 байтовая длина кадра, в настоящее время не используется, заполнена пробелами (20hex)
FN 2-байтовый номер кадра, не используемый в настоящее время, заполненный пробелами (20hex)
FI 2-байтовый идентификатор кадра, только "E", "I", " D " и " S " используются для 1. Байт
в настоящее время, 2. Байт всегда пустой (20hex)
[Данные] данные приложения (если таковые имеются)
Контрольная Сумма 2 Байта Контрольная Сумма
<ETX> 1 байт (03hex) завершение кадра
2.2 обнаружение ошибок и управление потоком
Для обеспечения целостности данных контрольная сумма передается с каждым кадром. Эта контрольная сумма
вычисляется путем сложения значений всех переданных байтов из <stx> В [DATA] (оба
включительно), модуль 100hex. Сумма делится на 10hex. 30hex добавляется к обоим
частное и остаток от деления. Результаты (ASCII ‘0’ -‘?’) представляют собой контрольную сумму из 2 символов. Например, сумма 3f9hex приведет к “?9”.
Пример Журнала Связи;
HCTS -> LIS <STX>..... D.BI/1234ABC5678/30500000/?7<ETX> --- контрольная сумма ?7
LIS -> HCTS <ACK>
Лис -&ГТ; HCTS &ЛТ;компания&ГТ;.....Д. Д. У.|1234ABC5678|||чоле....BILI_TOT|5=&ЛТ;ЕТХ&ГТ; --- контрольная сумма 5=
HCTS -> LIS: <ACK>
HCTS -&ГТ; лис &ЛТ;компания&ГТ;.....Д. Би|1234ABC5678|D050000F|1&ГТ;&ЛТ;ЕТХ&ГТ; -----контрольная сумма 1&ГТ;
LIS -> HCTS <ACK>
HCTS -> LIS <STX>..... D.BI/9555907034/A000000B|;7<ETX> - - - - - - контрольная сумма ;7
HCTS -> LIS <STX>..... D.BI//A000000Z/<0<ETX> - - - - - - - контрольная сумма <0
Не: ..... = пусто
Я не рассчитал контрольную сумму. Где я делаю ошибки?
Что я уже пробовал:
public string ConvertToHex(string asciiString) { string hex = ""; foreach (char c in asciiString) { int tmp = c; hex += string.Format("{0:X2}", Convert.ToUInt32(tmp.ToString())); } return hex; }
public static byte[] StringToByteArray(string text) { return Enumerable.Range(0, text.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(text.Substring(x, 2), 16)) .ToArray(); }
private void button2_Click(object sender, EventArgs e) { string hex = ConvertToHex(dataBox.Text); int total = StringToByteArray(hex).Sum(x => x); string totalStr = string.Format("{0:x}", total); resultBox.Text = totalStr; }