C ++ cout шестнадцатеричные значения? - PullRequest
127 голосов
/ 26 января 2009

Я хочу сделать:

int a = 255; 
cout << a;

и он показывает FF на выходе, как бы я это сделал?

Ответы [ 7 ]

178 голосов
/ 26 января 2009

Использование:

#include <iostream>

...

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

Существует множество других опций для точного форматирования выходного числа , таких как начальные нули и прописные / строчные буквы.

38 голосов
/ 26 января 2009

std::hex определяется в <ios>, который включен в <iostream>. Но чтобы использовать такие вещи, как std::setprecision/std::setw/std::setfill / etc, вы должны включить <iomanip>.

36 голосов
/ 05 марта 2009

Для управления потоком для печати в шестнадцатеричном формате используйте манипулятор hex:

cout << hex << a;

По умолчанию шестнадцатеричные символы выводятся в нижнем регистре. Чтобы изменить его на прописные, используйте манипулятор uppercase:

cout << hex << uppercase << a;

Чтобы позже изменить вывод обратно на строчные, используйте манипулятор nouppercase:

cout << nouppercase << b;
14 голосов
/ 17 января 2015

Если вы хотите напечатать одно шестнадцатеричное число, а затем вернуться к десятичному числу, вы можете использовать это:

std::cout << std::hex << num << std::dec << std::endl;
8 голосов
/ 22 апреля 2012

Существуют различные виды флагов и масок, которые вы также можете использовать. Пожалуйста, обратитесь 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;
}
8 голосов
/ 05 марта 2009

Я понимаю, что это не то, о чем просил OP, но я все же думаю, что стоит указать, как это сделать с помощью printf. Я почти всегда предпочитаю использовать его вместо std :: cout (даже без предыдущего C-фона).

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

«2» определяет точность, «X» или «x» определяет регистр.

3 голосов
/ 01 февраля 2019

std::hex возвращает вам шестнадцатеричное форматирование, но это опция с сохранением состояния, то есть вам нужно сохранить и восстановить состояние, или это повлияет на весь будущий вывод.

Наивное переключение обратно на 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

Это объединяет ответ Грега Хьюгилла и информацию от другого вопроса .

...