I am writing an implementation of a DES encryption with a 64 bit plaintext, taken from the pixel information in a BMP file. So I want to skip the header which is 54 bytes, but I am not sure how to do this. This will not be a dynamic project, in the sense that I will always use the same BMP file (as I am producing both a CBC and EBC mode BMP file at the program finish)
If you have no idea what I am talking about, check out this link.

So I would like to open the bmp file, skip the first 54 bytes, then consecutively read 8 byte blocks and encrypt them. I just don't know very much about using files in C++.

9 Years
Discussion Span
Last Post by nucleon
char buffer[100];
ifstream f;

f.open ("pic.bmp", ios::binary);

// skip header
f.read (buffer, 54);

// read 8 bytes into buffer
f.read (buffer, 8);
Votes + Comments
Thank you

Thank you. I do have one question though. What does the ios::binary do, does that translate the hex digits into binary when read into the buffer?


No. Binary mode simply ensures that all file bytes are put into the buffer as is, with no translation whatsoever. Text mode may, depending on the operating system, translate various bytes. For instance, in windows the usual end of line marker is ascii-13 followed by ascii-10. But when read in text mode, all your program sees is the ascii-10.


What I am planning on doing is bitwise operation on the 8 bytes read in from the file. I was thinking of converting the 8 bytes to an integer value, then I remembered ints in windows are 4 bytes. Is a long 8 bytes? And is there a way to convert the 8 bytes read in to the buffer into a long value I can manipulate?

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.