Odpowiedzi:
Posługiwać się:
#include <iostream>
...
std::cout << std::hex << a;
Istnieje wiele innych opcji kontrolowania dokładnego formatowania numeru wyjściowego , na przykład zera wiodące i wielkie / małe litery.
ios::fmtflags f(cout.flags());
i przywrócić go za pomocą out.flags(f);
.
std::cout.flags(f);
Aby manipulować strumieniem w celu wydrukowania w formacie szesnastkowym, użyj hex
manipulatora:
cout << hex << a;
Domyślnie znaki szesnastkowe są zapisywane małymi literami. Aby zmienić to na wielkie litery, użyj uppercase
manipulatora:
cout << hex << uppercase << a;
Aby później zmienić wyjście z powrotem na małe litery, użyj nouppercase
manipulatora:
cout << nouppercase << b;
nouppercase
zmieni wyjście z powrotem na dziesiętne?
Rozumiem, że nie o to prosił OP, ale nadal uważam, że warto wskazać, jak to zrobić z printf. Prawie zawsze wolę używać go zamiast std :: cout (nawet bez poprzedniego tła C).
printf("%.2X", a);
„2” określa dokładność, „X” lub „x” określa wielkość liter.
printf("hello\n")
jest równoważne fprintf(stdout, "hello\n")
. Bardziej użytecznie możesz przekazać stdout
(lub stdin
, lub stderr
) do funkcji, która przyjmuje FILE*
argument.
Istnieją również różne rodzaje flag i masek, których możesz użyć. Więcej informacji można znaleźć pod adresem 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
wyświetla formatowanie szesnastkowe, ale jest to opcja stanowa, co oznacza, że musisz zapisać i przywrócić stan, w przeciwnym razie wpłynie to na wszystkie przyszłe wyniki.
Naiwne przełączanie się z powrotem na std::dec
jest dobre tylko wtedy, gdy tam były wcześniej flagi, co może nie mieć miejsca, szczególnie jeśli piszesz bibliotekę.
#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
To łączy odpowiedź Grega Hewgilla i informacje z innego pytania .
Użyj std::uppercase
i, std::hex
aby sformatować zmienną całkowitą, a
która ma być wyświetlana w formacie szesnastkowym.
#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;
zmienić to z powrotem.