Разбор пакета данных, полученного из последовательного порта
Выходные данные - это в основном представление dec байтов. а аппаратное обеспечение ,подключенное к последовательному порту ,отправляет его в следующем формате E0 ,F2,идентификатор устройства,длина 2 байта, текущая дата, текущее время(хранить как текущую дату, так и текущее время более чем в 2 байтах путем сдвига вправо и некоторые другие данные)
Я получаю данные кусками иногда по 4 байта, иногда по 8 байт.То, что я хочу сделать, это 1.я хочу сначала проверить, что я получил в этом пакете данных, как заголовок 2.затем, когда я получил следующий блок данных, я хочу проверить не заголовок, а следующую информацию, такую как дата и время, и так далее..
в основном я хочу разобрать входящий пакет.
может ли кто-нибудь привести небольшой пример?Это будет очень полезно.
Спасибо.
Что я уже пробовал:
using System; using System.Collections.Generic; using System.IO; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SerialPortHexCommunication { public class Program { static void Main(string[] args) { SerialPort port = new SerialPort(); port.PortName = "COM5"; port.Parity = Parity.None; port.BaudRate = 9600; port.DataBits = 8; port.StopBits = StopBits.One; if (port.IsOpen) { port.Close(); port.Dispose(); } port.Open(); byte[] bytesToSend = new byte[6] { 0xD0, 0xF2, 0xFF, 0x00, 0x06, 0xC7 }; port.Write(bytesToSend, 0, bytesToSend.Length); port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); Console.ReadKey(); port.Close(); port.Dispose(); } private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { Console.WriteLine("Data receive at time "+ DateTime.Now.TimeOfDay); SerialPort port = (SerialPort)sender; int bytes = port.BytesToRead; byte[] buffer = new byte[bytes]; if (port.BytesToRead > 1) { port.Read(buffer, 0, bytes); } foreach (byte item in buffer) { Console.WriteLine(item); } } }