sacar - ¿Cómo puedo convertir números hexadecimales a binarios en C++?
programa binario a decimal (6)
Esto suena como una tarea, en cuyo caso deberías pedirle ayuda a tu maestra. Solicitar soluciones de tareas desde Internet en realidad no te ayudará a largo plazo (a menos que vayas a la administración de proyectos).
Respondiendo a chustar (el OQ''er) en los comentarios, tendría que aceptar que si entiendes cómo hacerlo, cómo / por qué funciona y cómo resolverlo tú mismo en el futuro, entonces sí, eso sería una cosa buena.
Sin embargo, la respuesta que marcó como "correcta" desmiente ese argumento. No contiene nada más que código, precedido de las palabras "Like So". Está bastante claro que lo que el OQ''er estaba buscando no era una explicación, sino que alguien escribiera su código para él.
Estoy tomando una clase C ++ inicial, y me gustaría convertir letras entre representaciones hexadecimales y binarias. Puedo lograr imprimir los números hexadecimales usando:
for(char c = ''a''; c <= ''z''; c++){
cout << hex << (int)c;
}
Pero no puedo hacer lo mismo para binario. No hay std::bin
que pueda usar para convertir los números decimales en binarios.
No hay un manipulador binario io en C ++. Debe realizar la cobertura a mano, probablemente mediante el uso de operadores de desplazamiento de bits. La conversión real no es una tarea difícil, por lo que debe estar dentro de las capacidades de un principiante en C ++ (mientras que el hecho de que no esté incluido en la biblioteca estándar puede no ser :))
Editar: muchos otros han puesto ejemplos, así que voy a dar mi método preferido
void OutputBinary(std::ostream& out, char character)
{
for (int i = sizeof(character) - 1; i >= 0; --i)
{
out << (character >> i) & 1;
}
}
Esto también podría ser potencialmente modelado a cualquier tipo numérico.
Por un poco de variedad, también puedes hacerlo usando una tabla de búsqueda de 16 elementos.
Puedes escribir fácilmente un mapeo entre los caracteres hexadecimales y sus ''nibbles'' binarios:
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";
};
Puedes hacer algo como esto:
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;
}
}
}
Al igual que:
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;
}