Pergunta
Eu estou tentando saída o valor hexadecimal de um caractere e formatá-lo de uma forma agradável.
necessário: 0x01 : value 0x1
Tudo que eu posso chegar é: 00x1 : value 0x1
// ou 0x1 se eu não usar iomanip
Aqui está o código que eu tenho, 'ch' foi declarado ser um char não assinado. Existe alguma outra maneira de fazer isso além de verificar o valor e adicionar manualmente um '0' ??
cout << showbase;
cout << hex << setw(2) << setfill('0') << (int) ch;
Editar:
Eu encontrei uma solução on-line:
cout << internal << setw(4) << setfill('0') << hex << (int) ch
Solução
std::cout << "0x" << std::noshowbase << std::hex << std::setw(2) << std::setfill('0') << (int)ch;
Desde almofadas setw
fora à esquerda do número total impressa (após showbase
é aplicada), showbase
não é utilizável no seu caso. Em vez disso, imprimir manualmente para fora da base, como mostrado acima.
Outras dicas
Em um em meus projetos eu fiz isso:
ostream &operator<<(ostream &stream, byte value)
{
stream << "0x" << hex << (int)value;
return stream;
}
Eu surchaged o operador << para a saída de fluxo, e tudo o que era um byte foi mostrado em hexadecimal. byte é um typedef para unsigned char.