3

以下のコードは、数値を 16 進数形式で入力し、10 進数形式で出力するコードを書きました。

#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 の 16 進数) を入力すると、出力は再び c(12 ではありません) になりました。誰か説明できますか?

4

3 に答える 3

6

これは、uint8_t通常はtypedeffor であるため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 
c
12
于 2012-12-09T14:16:55.900 に答える
4

uint8_tこれは、が実際にはであるという不幸な副作用unsigned charです。したがって、c を格納すると、数値 12 ではなく、c の ASCII 値 (10 進数の 99) が格納されます。

于 2012-12-09T14:17:05.653 に答える
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
于 2021-03-05T04:32:08.853 に答える