Why is character 'a' not converted to 97 automatically?-Collection of common programming errors

In the first, you asked to input a character, so you got the first non-whitespace character in the stream. In the second, you asked to input an integer, so the stream skips whitespace (as it always does with >>) and attempted to parse an integer. Since "a" cannot be the start of an integral value, the stream set an error status (the failbit) and returned, without modifying input2. When you output the uninitialized variable, you have undefined behavior. (You should never use a variable you’ve input without first checking whether the input succeeded or not.)

From what you describe, it sounds like you are trying to input some binary format. To do that, you must open the stream in binary mode, ensure that it is imbued with the "C" locale, and then use istream::get or istream::read. (Of course, you have to know what the binary format is that you are reading, in order to be able to convert the unformatted bytes you read into the actual information you need.)