Ну в разных языках\способах все выглядит по разному. У меня это вот так
Код:
byte[] optionalData = reader.ReadBytes(optionalDataLength);
byte[] data = reader.ReadBytes(dataLength);
using (BinaryReader binReader = new BinaryReader(new MemoryStream(data)))
{
uint opcode = binReader.ReadUInt32();
byte[] byteData = binReader.ReadBytes((int) (binReader.BaseStream.Length - 4));
packets.Add(new Packet(direction, (Opcode) opcode, byteData, unixTime, tickCount));
}