Apparently, using the stream operators produces results inconsistent with themselves. If I open an ifstream, and use the >> operator to read from the stream into a char variable, the program reads two bytes, and puts the second one into the variable. If, on the other hand, I open an ofstream, and use the << operator to output the contents of a char variable to a file, it outputs one byte.
In other news, I've managed to decode the RLE-compressed maps. I need to finalize my own map format, and then I might actually be ready to do a map viewer.