Подготовка массива данных или строки для передачи в Serialport - C#
Формулировка задачи:
Привет ребята!
Я не являюсь программистом, чисто любительски пишу для собственных нужд от редкого случая к случаю.
Суть проблемы:
Имеется несколько переменных типа byte и пара одномерных массивов данных тоже byte.
Нужно это добро все собрать в строгой последовательности, согласно протоколу и отправить в serialport.
Сегодня решил этот вопрос таким способом, оно работает, но мне не нравится.
А не нравится мне постоянное инкрементирование num_msg для того, чтобы записывать все элементы в определенной последовательности.
Нельзя ли как-нибудь проще решить этот вопрос (сборка сообщения)? Может string-ами, постоянно добавлять в конец новый элемент, но как?
//Собираю сообщение
//_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++;
}Решение задачи: «Подготовка массива данных или строки для передачи в 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]);
}