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 forunsigned char
. So it's actually readingc
as ASCII 0x63.
Is there a 1 byte integer which behaves as an integer while doing I/O and not as char?
Not that I know of.
You could do the I/O using a wider integer type, and use range checking and casting as appropriate.
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;
}
来源:https://stackoverflow.com/questions/13804591/1-byte-integer-data-type