Я написал код ниже, который вводит число в шестнадцатеричном формате и выводит его в десятичной форме:
#include<iostream>
#include<iomanip>
#include<stdint.h>
using namespace std;
int main()
{
uint8_t c;
cin>>hex>>c;
cout<<dec<<c;
//cout<<sizeof(c);
return 0;
}
Но когда я ввел c (hex для 12), выход снова был c (а не 12). Может кто-нибудь объяснить?
Это потому что uint8_t
обычно typedef
за unsigned char
, Так что на самом деле это чтение 'c'
как ASCII 0x63
,
использование int
вместо.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int c;
cin>>hex>>c;
cout<<dec<<c<<'\n';
return 0;
}
Выход программы:
$ g ++ test.cpp $ ./a.out с 12
Это неприятный побочный эффект того факта, что uint8_t
на самом деле unsigned char
, Поэтому, когда вы сохраняете c, в нем сохраняется значение ASCII c (десятичное число 99), а не числовое значение 12.