web-dev-qa-db-ja.com

C ++ cout 16進値?

私はやってみたいです:

int a = 255; 
cout << a;

出力にFFを表示していますか、これをどうすればよいですか?

132
user34537

つかいます:

#include <iostream>

...

std::cout << std::hex << a;

出力番号の正確な書式設定を制御する他の多くのオプション があります(先行ゼロや大文字/小文字など)。

183
Greg Hewgill

std::hexは、<ios>に含まれる<iostream>で定義されています。ただし、std::setprecision/std::setw/std::setfill/etcなどを使用するには、<iomanip>を含める必要があります。

41
Benoît

ストリームを操作して16進数で印刷するには、hexマニピュレーターを使用します。

cout << hex << a;

デフォルトでは、16進文字は小文字で出力されます。大文字に変更するには、uppercaseマニピュレーターを使用します。

cout << hex << uppercase << a;

後で出力を小文字に戻すには、nouppercaseマニピュレーターを使用します。

cout << nouppercase << b;
37
Ashwin Nanjappa

単一の16進数を出力してから10進数に戻す場合は、これを使用できます。

std::cout << std::hex << num << std::dec << std::endl;
16
Ben-Uri

使用できるフラグとマスクにはさまざまな種類があります。詳細については、 http://www.cplusplus.com/reference/iostream/ios_base/setf/ を参照してください。

#include <iostream>
using namespace std;

int main()
{
    int num = 255;
    cout.setf(ios::hex, ios::basefield);
    cout << "Hex: " << num << endl;

    cout.unsetf(ios::hex);
    cout << "Original format: " << num << endl;

    return 0;
}
10
Gaurav

これはOPが要求したものではないことは理解していますが、それでもprintfでそれを行う方法を指摘する価値があると思います。私はほとんどの場合、std :: cout(以前のCのバックグラウンドがなくても)よりもそれを使用することを好みます。

printf("%.2X", a);

「2」は精度を定義し、「X」または「x」は大文字と小文字を定義します。

9
Daniel Sloof

std::hexは16進形式を取得しますが、ステートフルオプションです。つまり、状態を保存および復元する必要があります。そうしないと、すべての将来の出力に影響します。

単純にstd::decに戻すことは、フラグが以前あった場所でのみ有効であり、特にライブラリを作成している場合はそうではありません。

#include <iostream>
#include <ios>

...

std::ios_base::fmtflags f( cout.flags() );  // save flags state
std::cout << std::hex << a;
cout.flags( f );  // restore flags state

これは、グレッグヒューギルの回答と 別の質問 からの情報を組み合わせたものです。

5
jtpereyda