Обработка данных из com порта - C#
Формулировка задачи:
Неправильно читаются данные из массива (в одном байте игнорируется 0 спереди)
Настройки порта не привожу, чтобы не захламлять код Кусок кодаconst int DataSize = 344;
byte[] rez = new byte[DataSize]; // массив для хранения данных длинной 344 байта
SerialPort ComPort = new SerialPort();
public void readcomport()
{
listBox1.Items.Clear();
ComPort.DiscardInBuffer();
ComPort.DiscardOutBuffer();
// цикл считывания побайтно из порта и преобразование в 16-ую систему счисления.
for (int i = 0; i< DataSize; i++)
{
rez[i]= Convert.ToByte(ComPort.ReadByte());
listBox1.Items.Add(i + ". " + Convert.ToString(rez[i], 16)); //выводим данные ListBox
}
display(); // вызов функции отображение данных из прибора на экран
}
// Сцепление младшего и старшего байта
public string szepka (byte low, byte hi)
{
prizep = String.Concat(Convert.ToString(low, 16), Convert.ToString(hi, 16));
return prizep;
}
// Раскидываю данные по ячейкам
void display()
{
...
szepka(rez[225], rez[224]); // 1-1
textBox1.Text = Convert.ToInt32(prizep, 16).ToString();
szepka(rez[227], rez[226]); // 1-2
textBox2.Text = Convert.ToInt32(prizep, 16).ToString();
...
}listBox1.Items.Add(i + ". " + Convert.ToString(rez[i], 16).PadLeft(2,'0'));
Второй вопрос.
Как правильно округлить десятичное число, например до 4 знаков, но чтобы не пропадали нули, например, число 1.9600. Пробовал так,textBox91.Text = Math.Round(float.Parse(textBox61.Text) / float.Parse(textBox65.Text), 4).ToString();
Решение задачи: «Обработка данных из com порта»
textual
Листинг программы
textBox1.Text = (rez[225] << 8 | rez[224]).ToString(); textBox1.Text = (rez[227] << 8 | rez[226]).ToString();