1-байтовое целое число не конвертирует форматы ввода / вывода

Я написал код ниже, который вводит число в шестнадцатеричном формате и выводит его в десятичной форме:

#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). Может кто-нибудь объяснить?

2

Решение

Это потому что 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
6

Другие решения

Это неприятный побочный эффект того факта, что uint8_t на самом деле unsigned char, Поэтому, когда вы сохраняете c, в нем сохраняется значение ASCII c (десятичное число 99), а не числовое значение 12.

4

По вопросам рекламы [email protected]