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 hexmanipulatora:
cout << hex << a;
Domyślnie znaki szesnastkowe są zapisywane małymi literami. Aby zmienić to na wielkie litery, użyj uppercasemanipulatora:
cout << hex << uppercase << a;
Aby później zmienić wyjście z powrotem na małe litery, użyj nouppercasemanipulatora:
cout << nouppercase << b;
nouppercasezmieni 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::decjest 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::uppercasei, std::hexaby sformatować zmienną całkowitą, aktó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.