Существует гораздо лучший способ, который использует структуры для установки структур. Это обычно, как сетевые пакеты построены на низком уровне.
Например, если у вас есть пакеты с идентификатором, длиной, байтом флага и данными, вы должны сделать что-то вроде этого:
struct packet_header {
int id;
byte length;
byte flags;
};
byte my_packet[] = new byte[100];
packet_header *header = &my_packet;
header->id = 20;
header->length = 10; // This can be set automatically by a function, maybe?
// etc.
header++; // Header now points to the data section.
Обратите внимание, что вам нужно убедиться, что структуры "упакованы", т.е. когда вы пишете byte length
, это действительно занимает байт. Обычно вы достигаете этого, используя что-то вроде #pragma pack
или подобное (вам нужно прочитать о настройках прагмы вашего компилятора).
Также обратите внимание, что вам, вероятно, следует использовать функции для выполнения общих операций. Например, создайте функцию, которая получает в качестве входных данных размер, данные для отправки и другую информацию и заполняет для вас заголовок пакета и данные. Таким образом, вы можете выполнять вычисления относительно фактического размера, который вы хотите записать в поле длины, вы можете вычислить CRC внутри функции и т. Д.
Редактировать: Это C-центричный способ работы, стиль большого сетевого кода. Более ориентированный на C ++ (объектно-ориентированный) подход также мог бы работать, но я менее знаком с ними.