Skip to content

1 byte integer data type

An answer to this question on Stack Overflow.

Question

I wrote the following code:

#include <iostream>
 #include <iomanip>
 #include <stdint.h>
 using namespace std;
 int main()
 {
     uint8_t c;
     cin  >> hex >> c;
     cout << dec << c;
     return 0;
 }

But when I input c—hex for 12—the output is also c. I was expecting 12. Later I learned that:

uint8_t is usually a typedef for unsigned char. So it's actually reading c as ASCII 0x63.

Is there a 1 byte integer which behaves as an integer while doing I/O and not as char?

Answer

I'm afraid I don't know of a way either, but reading a hex number into an integer type can be accomplished as follows:

#include <iostream>
using namespace std;
int main () {
	short c;
	cin >> std::hex >> c;
	cout << c << endl;
	return 0;
}