Подготовка массива данных или строки для передачи в Serialport - C#

Узнай цену своей работы

Формулировка задачи:

Привет ребята! Я не являюсь программистом, чисто любительски пишу для собственных нужд от редкого случая к случаю. Суть проблемы: Имеется несколько переменных типа byte и пара одномерных массивов данных тоже byte. Нужно это добро все собрать в строгой последовательности, согласно протоколу и отправить в serialport. Сегодня решил этот вопрос таким способом, оно работает, но мне не нравится.
//Собираю сообщение
//_Passw - массив типа byte
//data - то же массив byte
//_OPT, _AddrD_L, AddrD_H и другие -это переменные типа byte
//Msg - итоговый массив 
//len - количество элементов в итоговом массиве (его длина) 
//num_msg - указатель следующей позиции для записи в итоговом массиве 
            int num_msg=0;
            int len = _Passw.Length + data.Length + 8; //8 - количество значений переменных типа byte в итоговом сообщении
            Msg = new byte[len];
            Msg[num_msg] =_OPT; //Нулевым элементом ставим значение переменной _OPT
            num_msg++;
            Msg[num_msg] = _AddrD_L; //И так далее
            num_msg++;
            Msg[num_msg] = _AddrD_H;
            num_msg++;
            Msg[num_msg] = _AddrS_L;
            num_msg++;
            Msg[num_msg] = _AddrS_H;
            num_msg++;
            for (int i=0; i<_Passw.Length; i++)
            {
                
                Msg[num_msg] = _Passw[i];
                num_msg++;
            }
            Msg[num_msg] =_Serv;
            num_msg++;
            Msg[num_msg] = _AddrH;
            num_msg++;
            Msg[num_msg] = _AddrL;
            num_msg++;
            for (int i = 0; i < _Data.Length; i++)
            {

                Msg[num_msg] = _Data[i];
                num_msg++;
            }
А не нравится мне постоянное инкрементирование num_msg для того, чтобы записывать все элементы в определенной последовательности. Нельзя ли как-нибудь проще решить этот вопрос (сборка сообщения)? Может string-ами, постоянно добавлять в конец новый элемент, но как?

Решение задачи: «Подготовка массива данных или строки для передачи в Serialport»

textual
Листинг программы
int len = _Passw.Length + data.Length + 8; //8 - количество значений переменных типа byte в итоговом сообщении
var Msg = new List<byte>(len); // Здесь capacity передавать не обязательно, но так можно создать массив заранее правильной длинны, чтобы потом не пересоздавать новый с двойной длинной
Msg.Add(_OPT); //Нулевым элементом ставим значение переменной _OPT
Msg.Add(_AddrD_L); //И так далее
Msg.Add(_AddrD_H);
Msg.Add(_AddrS_L);
Msg.Add(_AddrS_H);
for (int i = 0; i < _Passw.Length; i++)
{
    Msg.Add(_Passw[i]);
}
Msg.Add(_Serv);
Msg.Add(_AddrH);
Msg.Add(_AddrL);
for (int i = 0; i < _Data.Length; i++)
{
    Msg.Add(_Data[i]);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы