1字节整数不转换I / O格式

时间:2012-12-09 14:10:29

标签: c++ hex uint iomanip

我写了下面的代码,它以十六进制格式输入一个数字并以十进制形式输出: -

#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(十六进制为12)时,输出又是c(而不是12)。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:6)

这是因为uint8_t通常是typedef的{​​{1}}。所以它实际上以unsigned char的形式阅读'c'

改为使用0x63

int

节目输出:

$ g++ test.cpp
$ ./a.out
c
12

答案 1 :(得分:4)

uint8_t实际上是unsigned char,这是一个令人遗憾的副作用。所以当你存储c时,它存储的是c值(十进制99)的ASCII值,而不是数值12。

答案 2 :(得分:0)

uint8_tunsigned char 的别名,不幸的是 ostream 试图将其作为字符输出。这已在 C++20 中修复std::format

#include <format>
#include <iostream>
#include <stdint.h>

int main() {
  uint8_t n = 42;
  std::cout << std::format("{}", n);
}

输出:

42