Como posso converter números hexadecimais em binário em C ++?
Pergunta
Estou fazendo uma aula de C ++ inicial e gostaria de converter cartas entre representações hexadecimais e binárias. Eu consigo imprimir os números hexadecimais usando:
for(char c = 'a'; c <= 'z'; c++){
cout << hex << (int)c;
}
Mas não posso fazer o mesmo para o binário. Não há std::bin
que posso usar para converter os números decimais em binário.
Solução
Igual a:
for(char c = 'a'; c <= 'z'; c++){
std::bitset<sizeof(char) * CHAR_BIT> binary(c); //sizeof() returns bytes, not bits!
std::cout << "Letter: " << c << "\t";
std::cout << "Hex: " << std::hex << (int)c << "\t";
std::cout << "Binary: " << binary << std::endl;
}
Outras dicas
Não há um manipulador de IO binário no C ++. Você precisa executar a cobertura manualmente, provavelmente usando operadores de troca de bits. A conversão real não é uma tarefa difícil, por isso deve estar dentro das capacidades de um iniciante no C ++ (enquanto o fato de que não está incluído na biblioteca padrão pode não ser :))
EDIT: Muitos outros colocaram exemplos, então vou dar meu método preferido
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
Isso também pode ser potencialmente modificado para qualquer tipo numérico.
Para um pouco de variedade, você também pode fazê -lo usando uma tabela de pesquisa de 16 elementos.
Você pode escrever facilmente um mapeamento entre os Charachters hexáticos e seus binários 'nibbles':
std::string HexCharToNibble( char c ) {
switch (c) {
case '0': return "0000";
case '1': return "0001";
//... fill in the rest
case 'f': return "1111";
default: assert(false); return "bad input";
};
Você pode fazer algo assim:
for(char c = 'a'; c <= 'z'; c++){
// char is 8 bits. print 4 bits
// at a time, starting with the MSB
for (int i = 4; i>=0; i-=4) {
switch (((int)c >> i) & 0xf) {
case 0:
cout << "0000";
break;
case 1:
cout << "0001";
break;
.
.
.
case 0xf:
cout << "1111";
break;
}
}
}
Parece uma tarefa, caso em que você realmente deve pedir ajuda ao seu professor. Solicitar soluções para a lição de casa da Internet realmente não vai ajudá -lo a longo prazo (a menos que você esteja entrando no gerenciamento de projetos).
Respondendo a Chustar (o OQ'ER) nos comentários, eu teria que concordar que, se você entender como fazê -lo, como/por que funciona e como descobrir isso no futuro, então sim, isso seria uma coisa boa.
No entanto, a resposta que ele marcou "correto" coloca a mentira nesse argumento. Ele não contém nada além de código, precedido com as palavras "como assim". É bem claro que o que o OQ'ER estava procurando era não Para uma explicação, mas alguém escrever seu código para ele.