Jul 17, 2013 at 10:00pm
(Rewritten:)
So, I was reading that article on binary files:
Disch wrote: |
---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
u16 ReadU16(istream& file)
{
u16 val;
u8 bytes[2];
file.read( (char*)bytes, 2 ); // read 2 bytes from the file
val = bytes[0] | (bytes[1] << 8); // construct the 16-bit value from those bytes
return val;
}
void WriteU16(ostream& file, u16 val)
{
u8 bytes[2];
// extract the individual bytes from our value
bytes[0] = (val) & 0xFF; // low byte
bytes[1] = (val >> 8) & 0xFF; // high byte
// write those bytes to the file
file.write( (char*)bytes, 2 );
}
|
u32 would be the same way, but you would break it down and reconstruct it in 4 bytes rather than 2. |
But, I don't know what he means by the part in bold text. It'd be nice if you guys could give me a snippet on what he meant.
Last edited on Jul 17, 2013 at 10:13pm by Fredbill30
Jul 17, 2013 at 11:00pm
In the code he deals with short integers ( 16-bits) and says that in fact the same idea can be apllied to 32-bit integers.
Jul 17, 2013 at 11:13pm
Probably something like this (untested)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
u32 ReadU32(istream& file)
{
u32 val;
u8 bytes[4];
file.read( (char*)bytes, 4 ); // read 2 bytes from the file
val = bytes[0] | (bytes[1] << 8) | (byte[2] << 16) | (byte[3] << 24); // construct the 32-bit value from those bytes
return val;
}
void WriteU32(ostream& file, u32 val)
{
u8 bytes[4];
// extract the individual bytes from our value
bytes[0] = (val) & 0xFF;//0xFFFF; // low byte
bytes[1] = (val >> 8) & 0xFF;//0xFFFF;
bytes[2] = (val >> 16) & 0xFF;//0xFFFF;
bytes[3] = (val >> 24) & 0xFF;//0xFFFF; // high byte
// write those bytes to the file
file.write( (char*)bytes, 4 );
}
|
Last edited on Jul 18, 2013 at 12:16am
Jul 17, 2013 at 11:19pm
Can Disch confirm what's above?
Jul 17, 2013 at 11:41pm
naraku is correct, that is what I had in mind.
Though you should probably do & 0xFF
instead of & 0xFFFF
, since the goal is to isolate the byte, not the word.
Jul 17, 2013 at 11:47pm
Alright thanks, this is solved.
Jul 18, 2013 at 2:50am
Wait, does this work with integers? Because it has a char pointer.
Jul 18, 2013 at 2:57am
Yes, it works with integers.