подскажите - как мне собирать данные в пакет, этот пакет превращать в байтовый массив, и отправлять по сети.
а на обратной стороне принять его, разобрать, и получить информацию в удобном виде?
Это то же самое что писать данные в файл/поток. Используйте IFF teg'и
имя tag (тип) - 4 байта
число следующих байт (длина tag) - 4 байта
сами данные - переменной длины
Tag может содержать вложенные tag'и. Если длину сложно подсчитать, то обычно делают так (псевдокод):
theStream.writeUInt32('TAG1'); // write tag ID
theStack.push(file.position()); // push file position
theStream.writeUInt32(0); // write zeo
.....
// write data
...
size_t savedPos = theStack.pop();
size_t endPos = theStream.position();
theStream.seek(savedPos);
theStream.writeUInt32(endPos - savedPos - 4); // write data length
theStream.seek(endPos); // back to stream end
Это позволяет записывать данные в любом порядке и контролировать правильность пакета при чтении
Если уж "по всем правилам" то надо писать данные в BIG_ENDIAN, но это можно не делать (становится историей)