Re: Newbie question: How to define a class that will work on bits
from a binary file?
Victor Bazarov a ?crit :
Damfino wrote:
Hi all,
Newbie question here wrt defining a class that will work on bits read
from a binary file. How would you go about doing it? As an example
please look at the structure of my data given below. The data comes in
40 byte packets via stdin or a binary file.
my_Data_pkt(){
syncByte (8bits)
XML_type (2bits)
XML_subtype (2bits)
record_value (3bits)
playout_flag (1bit)
if (playout_flag=='1') {
playout_length (8bits)
for (i=0; i< playout_length; i++){
playout_data
}
}
payload to fill the rest of the 40 bytes
}
How would this be defined as a class?
// assuming that 'char' is 8 bits
And assuming the machine is in little endian. In big endian, you would
have to invert the bit fields.
class DataPacket {
// somehow control the alignment and make it 1 byte
// to avoid padding between members of this class
char syncByte; // not sure you need this to be kept
struct BitStuff {
unsigned XML_type:2;
unsigned XML_subtype:2;
unsigned record_value:3;
unsigned payout:1;
} fields;
char restOfPacket[38];
public:
// member functions go here
};
Why do you use an intermediary structure, I would have simply defined
(without LSB/MSB logic):
struct XML_Data
{
char syncByte;//8 bits
unsigned char XML_type:2; // 2 bits
unsigned char XML_subtype:2; //+2 bits
unsigned char record_value:3; //+3 bits
unsigned char payout:1; //+1 bits = 8 bits => aligned
char restOfPacket[38];
};
Michael