Если никак не получается решить для всего формата сразу, давайте хотя-бы определимся с заголовком:
Код:
struct FileHeader
{
byte signature[3]; // 'PKT' | 'RAW'.
word version; // == 0x0003 - для версии 3.0.
byte snifferID; // Распределить уникальные номера.
uint build; // Номер сборки клиента, обратите внимание, тип uint (4 байта).
byte language[4]; // Язык клиента: 'ruRU', 'enGB' и т.д.
byte sessionKey[40]; // Ключ сессии, для PKT не используется и может быть заполнен как угодно (лучше нулями).
uint optionalHeader; // Размер опционального заголовка в байтах,
// который идет сразу после заголовка файла и содержит все, что угодно.
// Если optionalHeader == 0, тогда опциональный заголовок в файле отсутствует.
};
// sizeof(FileHeader) == 3 + 2 + 1 + 4 + 4 + 40 + 4 = 58 байт (align == 1)