Ce face std::hex
std::hex, std::oct și std::dec schimbă baza în care un flux scrie și citește numerele întregi. Schimbarea rămâne activă până alegi altă bază, deci după std::hex trebuie să revii cu std::dec.
std::showbase adaugă prefixul bazei (0x pentru 16, 0 pentru 8), iar std::uppercase scrie cifrele hexazecimale cu majuscule. Numerele reale nu sunt afectate de hex.
La citire, std::cin >> std::hex >> x interpretează textul ff ca 255. Pentru baza 2 nu există manipulator; folosește std::format("{:b}", x) sau std::bitset.
Exemple
Exemplul 1: Același număr în trei baze
#include <iomanip>
#include <iostream>
int main() {
int n = 255;
std::cout << "zecimal: " << std::dec << n << '\n';
std::cout << "hexazecimal: " << std::hex << n << '\n';
std::cout << "octal: " << std::oct << n << '\n';
std::cout << std::showbase << std::uppercase;
std::cout << "cu prefix: " << std::hex << n << ' ' << std::oct << n << '\n';
std::cout << std::dec << "înapoi: " << n << '\n';
}
Rezultat
zecimal: 255
hexazecimal: ff
octal: 377
cu prefix: 0XFF 0377
înapoi: 255
Exemplul 2: Culori RGB în hexazecimal
setw(2) și setfill('0') păstrează două cifre pentru fiecare componentă.
#include <iomanip>
#include <iostream>
int main() {
int rosu = 255, verde = 165, albastru = 0;
std::cout << "Portocaliu: #" << std::hex << std::setfill('0')
<< std::setw(2) << rosu << std::setw(2) << verde << std::setw(2) << albastru
<< std::dec << '\n';
}
Rezultat
Portocaliu: #ffa500
Exemplul 3: Citirea unui număr hexazecimal
#include <iomanip>
#include <iostream>
#include <sstream>
int main() {
std::istringstream text("ff 1a");
int a, b;
text >> std::hex >> a >> b;
std::cout << a << " si " << b << '\n';
}
Rezultat
255 si 26
Greșeli frecvente
- Uiți să revii la
std::dec: toate numerele afișate după aceea apar în baza 16 și par greșite. - Afișezi un
charcustd::hexși vezi tot litera, nu codul ei. Convertește-l întâi:static_cast<int>(static_cast<unsigned char>(c)).
Comenzi înrudite
std::setw: Stabilește lățimea minimă a următoarei valori, cu aliniere și caracter de umplere.std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).std::showpos: Afișează semnul + în fața numerelor pozitive (și a lui zero).std::to_chars: Scrie un număr ca text într-un tablou de char, foarte rapid, fără alocări și fără excepții.