Вероятно, у меня был бы простой класс (в любом случае, простой для начала):
class Packet
{
public:
Packet(unsigned int length);
Packet(void *data);
bool getBit(unsigned int bit);
void setBit(unsigned int bit,bool set);
private:
std::vector<unsigned char> bytes;
};
Это только начало, без сомнения, все будет сложнее в зависимости от того, для чего вы его используете. Вы могли бы подумать о перегрузке оператора массива, но это, вероятно, за пределами «начального уровня» и, возможно, лучше всего игнорировать его прямо сейчас.