Я хочу делать:
int a = 255;
cout << a;
и он показывает FF на выходе, как бы я это сделал?
Я хочу делать:
int a = 255;
cout << a;
и он показывает FF на выходе, как бы я это сделал?
Использование:
#include <iostream>
...
std::cout << std::hex << a;
Есть множество других опций для управления точным форматированием выходного номера, например, ведущие нули и верхний/нижний регистр.
std::hex
определяется в <ios>
, который включен <iostream>
. Но для использования таких вещей, как std::setprecision/std::setw/std::setfill
/etc, вы должны включить <iomanip>
.
Чтобы манипулировать потоком для печати в шестнадцатеричном виде, используйте манипулятор hex
:
cout << hex << a;
По умолчанию шестнадцатеричные символы выводятся в нижнем регистре. Чтобы изменить его на верхний регистр, используйте манипулятор uppercase
:
cout << hex << uppercase << a;
Чтобы впоследствии изменить вывод на нижний регистр, используйте манипулятор nouppercase
:
cout << nouppercase << b;
Если вы хотите напечатать одно шестнадцатеричное число, а затем вернуться к десятичному числу, вы можете использовать это:
std::cout << std::hex << num << std::dec << std::endl;
Я понимаю, что это не то, о чем попросил ОП, но я все же думаю, что стоит указать, как это сделать с помощью printf. Я почти всегда предпочитаю использовать его поверх std:: cout (даже без предыдущего фона C).
printf("%.2X", a);
'2' определяет точность, 'X' или 'x' определяет регистр.
Существуют различные типы флагов и масок, которые вы можете использовать. Для получения дополнительной информации см. 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;
}
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
Это объединяет ответ Грега Хьюгилла и информацию из другого вопроса.