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

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

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

Привет ребята! Я не являюсь программистом, чисто любительски пишу для собственных нужд от редкого случая к случаю. Суть проблемы: Имеется несколько переменных типа byte и пара одномерных массивов данных тоже byte. Нужно это добро все собрать в строгой последовательности, согласно протоколу и отправить в serialport. Сегодня решил этот вопрос таким способом, оно работает, но мне не нравится.
Листинг программы
  1. //Собираю сообщение
  2. //_Passw - массив типа byte
  3. //data - то же массив byte
  4. //_OPT, _AddrD_L, AddrD_H и другие -это переменные типа byte
  5. //Msg - итоговый массив
  6. //len - количество элементов в итоговом массиве (его длина)
  7. //num_msg - указатель следующей позиции для записи в итоговом массиве
  8. int num_msg=0;
  9. int len = _Passw.Length + data.Length + 8; //8 - количество значений переменных типа byte в итоговом сообщении
  10. Msg = new byte[len];
  11. Msg[num_msg] =_OPT; //Нулевым элементом ставим значение переменной _OPT
  12. num_msg++;
  13. Msg[num_msg] = _AddrD_L; //И так далее
  14. num_msg++;
  15. Msg[num_msg] = _AddrD_H;
  16. num_msg++;
  17. Msg[num_msg] = _AddrS_L;
  18. num_msg++;
  19. Msg[num_msg] = _AddrS_H;
  20. num_msg++;
  21. for (int i=0; i<_Passw.Length; i++)
  22. {
  23. Msg[num_msg] = _Passw[i];
  24. num_msg++;
  25. }
  26. Msg[num_msg] =_Serv;
  27. num_msg++;
  28. Msg[num_msg] = _AddrH;
  29. num_msg++;
  30. Msg[num_msg] = _AddrL;
  31. num_msg++;
  32. for (int i = 0; i < _Data.Length; i++)
  33. {
  34.  
  35. Msg[num_msg] = _Data[i];
  36. num_msg++;
  37. }
А не нравится мне постоянное инкрементирование num_msg для того, чтобы записывать все элементы в определенной последовательности. Нельзя ли как-нибудь проще решить этот вопрос (сборка сообщения)? Может string-ами, постоянно добавлять в конец новый элемент, но как?

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

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

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


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

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

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы