I
Igorg
Помогите, пожалуйста, разрешить след. проблему (я только-только начал C# изучать, поэтому никак не могу найти нужное решение).
Имеем код:
Этот код разбивает массив данных на пакеты фиксированного размера и отправляет в последовательный порт. Пакет - массив байт. Имеет заголовок, в заголовке три поля размерами Int16, Int16 и Int32 (packetType, packetCRC, packetDataLength). Не пойму как их после инициализации вписать в пакет. Нужных методов не нашел. В MSDN есть пример SerialLCDCS, так там они вот что использовали:
что, по-моему, несколько искусственно. Или я уже совсем ничего не понимаю?
Имеем код:
Код:
public Boolean SendData(Byte[] data, Int32 size)
{
Byte[] packet = new Byte[packetSize];
Int32 packetCount;
// Расчет количества пакетов, необходимых для передачи массива данных
packetCount = size / (packetSize - PACKET_HEAD_SIZE);
if ((size % (packetSize - PACKET_HEAD_SIZE)) != 0)
{
// В случае, если данные не умещаются в целое количество пакетов,
// необходимо добавить еще один пакет
packetCount++;
}
// Цикл отправки пакетов
for (int i = 0, offset = 0; i < packetCount; i++)
{
Int16 packetType, packetCRC;
Int32 packetDataLength;
Int32 packetTypeOffset, packetCRCOffset, packetDataLengthOffset, packetDataOffset;
// Сформируем пакет
packetTypeOffset = 0;
packetCRCOffset = packetTypeOffset + sizeof(Int16);
packetDataLengthOffset = packetCRCOffset + sizeof(Int16);
packetDataOffset = packetDataLengthOffset + sizeof(Int32);
... // Записываем поля заголовка и данные в пакет. Вот здесь-то и возникает проблема
SendPacket(packet);
}
return true;
}
Код:
ushort crc = CRCGenerator.GenerateCRC(packetXMitBuffer, dataLength + 2, CRC_SEED);
private byte[] packetXMitBuffer[2 + dataLength + 1] = (byte)(crc >> 8);
packetXMitBuffer[2 + dataLength] = (byte)crc;