Integer Conversions

Jul 25, 2008 at 1:24am
I have a question, but first...

1
2
3
4
5
6
bitmap.width = (int)//whatever number you like!

out << (bitmap.width      );
out << (bitmap.width >>  8);
out << (bitmap.width >> 16);
out << (bitmap.width >> 24);


Okay, I put this integer into the file correctly, but I am having a bit of trouble GETTING IT OUT!

Can anyone finish this?:
1
2
3
4
5
char meas[4];
in.get(meas[0]);  //All 4 bytes I put in
in.get(meas[1]);
in.get(meas[2]);
in.get(meas[3]);


Got anything?

PS-I posted what I thought was an answer on another post but after I looked into it, I found it was HORRIBLY wrong, please disregard my advice!
Jul 25, 2008 at 2:39am
No, you aren't outputting it correctly. You are writing four ints, each with an oddball value.

You need to be careful to write just one byte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// write little-endian 4-byte integer
// MAKE SURE stream is opened in BINARY mode!
void write_int_le4( ostream& outs, int value )
  {
  for (int n = 0; n < 4; n++, value >>= 8)
    outs.put( (unsigned char)value );
  }

// read little-endian 4-byte integer
// MAKE SURE stream is opened in BINARY mode!
int read_int_le4( istream& ins )
  {
  int result = 0;
  unsigned char c;
  for (int n = 0; n < 4; n++)
    {
    ins.get( c );
    result = (result << 8) + c;
    }
  return result;
  }

Hope this helps.
Jul 28, 2008 at 2:49am
Umm, is there any known reason why ifstream can't ready unsigned chars? It's says it can't convert char & to unsigned char...
Last edited on Jul 28, 2008 at 3:04am
Jul 29, 2008 at 8:53pm
Argh. It is complaining about my cast on line 6. Just get rid of the (unsigned char) part and it should work fine.

Sorry.
Topic archived. No new replies allowed.