Відповіді:
Використання:
#include <iostream>
...
std::cout << std::hex << a;
Існує безліч інших варіантів керування точним форматуванням вихідного числа , наприклад, ведучі нулі та верхній / нижній регістр.
ios::fmtflags f(cout.flags());
та відновити його out.flags(f);
.
std::cout.flags(f);
Для маніпулювання потоком для друку у шістнадцятковій формі використовуйте hex
маніпулятор:
cout << hex << a;
За замовчуванням шістнадцяткові символи виводяться малими літерами. Щоб змінити його на великі регістри, використовуйте uppercase
маніпулятор:
cout << hex << uppercase << a;
Щоб пізніше змінити вихідний результат на нижній регістр, використовуйте nouppercase
маніпулятор:
cout << nouppercase << b;
nouppercase
будете змінити вихідний результат на десятковий?
Я розумію, що це не те, про що вимагала ОП, але я все ж вважаю, що варто вказати, як це зробити з printf. Я майже завжди вважаю за краще використовувати його через std :: cout (навіть без попереднього C-фону).
printf("%.2X", a);
'2' визначає точність, 'X' або 'x' визначає випадок.
printf("hello\n")
це рівнозначно fprintf(stdout, "hello\n")
. Більш корисно, ви можете передати stdout
(або stdin
або stderr
) функції, яка бере FILE*
аргумент.
Ви також можете використовувати різні види прапорів та масок. Для отримання додаткової інформації зверніться до 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
Це поєднує в собі відповідь та інформацію Грега Хьюгілла з іншого питання .
Використовуйте std::uppercase
та std::hex
відформатуйте цілочисленну змінну a
для відображення у шістнадцятковому форматі.
#include <iostream>
int main() {
int a = 255;
// Formatting Integer
std::cout << std::uppercase << std::hex << a << std::endl; // Output: FF
std::cout << std::showbase << std::hex << a << std::endl; // Output: 0XFF
std::cout << std::nouppercase << std::showbase << std::hex << a << std::endl; // Output: 0xff
return 0;
}
cout << hex << a << dec;
змінити його назад.