我写了下面的代码,它以十六进制格式输入一个数字并以十进制形式输出: -
#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)。有人可以解释一下吗?
答案 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_t
是 unsigned 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