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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top