Domanda

Sto provando a generare il valore esadecimale di un carattere e formattarlo in modo piacevole.

Richiesto: 0x01 : value 0x1

Tutto quello che posso ottenere è: 00x1 : value 0x1 // o 0x1 se non uso iomanip

Ecco il codice che ho, 'ch' è stato dichiarato un carattere senza segno. Esiste un altro modo per farlo se non quello di controllare il valore e aggiungere manualmente uno "0" ??

cout << showbase;
cout << hex << setw(2) << setfill('0') << (int) ch;

Modifica:

Ho trovato una soluzione online:

cout << internal << setw(4) << setfill('0') << hex << (int) ch
È stato utile?

Soluzione

std::cout << "0x" << std::noshowbase << std::hex << std::setw(2) << std::setfill('0') << (int)ch;

Dato che setw si sposta verso sinistra del numero complessivo stampato (dopo l'applicazione di showbase), <=> non è utilizzabile nel tuo caso. Invece, stampa manualmente la base come mostrato sopra.

Altri suggerimenti

In uno dei miei progetti ho fatto questo:

ostream &operator<<(ostream &stream, byte value)
{
     stream << "0x" << hex << (int)value;
     return stream;
}

Ho sostituito l'operatore < < per l'output del flusso e tutto ciò che era un byte veniva mostrato in esadecimale. byte è un typedef per caratteri non firmati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top