Función C++ de conversión a hexadecimal
Resuelto
bouazza
Mensajes publicados
203
Fecha de registro
Estado
Miembro
-
Marcel_fait_du_tricot -
Marcel_fait_du_tricot -
Hola a todos, ¿alguien de ustedes puede decirme cuál es la función en C++ para convertir a hexadecimal? ¡Gracias por cualquier respuesta publicada!
15 respuestas
¡No es necesario hacer la conversión a mano! Te estás complicando demasiado para nada. Primer comentario: ¡Es C++! No utilices las viejas funciones de C. #include <stdio.h> debería ser #include <cstdio>. Si una biblioteca estándar tiene una extensión .h, es una vieja biblioteca de C. Las bibliotecas estándar de C++ simplemente no tienen extensión. 2) ¿Por qué usar printf? aquí también es para C. Sí, funciona en C++, pero es un mal hábito. std::cout existe para C++. Además, la biblioteca estándar ya incluye algo que te simplificará mucho la vida... se llama std::hex.
#include <iostream>
int main()
{
std::cout << "Introduce un número: ";
int nb;
std::cin >> nb;
std::cout << "Este número en hexadecimal es: "
<< std::hex << nb << std::endl;
}
Es así de simple, solo tienes que incluir std::hex en un cout, y los números se mostrarán en representación hexadecimal. Mucho MUCHO más rápido que una conversión manual. ¿Qué hacer si asignas un valor hexadecimal a una variable en tu programa?
int x = 0xFF;
Solo tienes que agregar 0x delante del número, eso es todo. Si quieres que te escriba una función para convertir de decimal a hexadecimal, dímelo, te escribiré una bastante rápida.
-Aghaster
www.planetcpp.info
#include <iostream>
int main()
{
std::cout << "Introduce un número: ";
int nb;
std::cin >> nb;
std::cout << "Este número en hexadecimal es: "
<< std::hex << nb << std::endl;
}
Es así de simple, solo tienes que incluir std::hex en un cout, y los números se mostrarán en representación hexadecimal. Mucho MUCHO más rápido que una conversión manual. ¿Qué hacer si asignas un valor hexadecimal a una variable en tu programa?
int x = 0xFF;
Solo tienes que agregar 0x delante del número, eso es todo. Si quieres que te escriba una función para convertir de decimal a hexadecimal, dímelo, te escribiré una bastante rápida.
-Aghaster
www.planetcpp.info
Ah, bueno entonces no hay problema. Te he escrito un pequeño programa que convierte una std::string de decimal a hexadecimal. Mejora lo que quieras (no he tenido en cuenta si se ingresan letras o caracteres diferentes a números). Es relativamente rápido, así que aquí está:
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
int main()
{
std::cout << "Introduce un número: ";
std::string nb;
std::cin >> nb;
// Convertimos de std::string a entero
int temp = 0;
int len = nb.length();
for(int i = 0; i < len; i++)
{
temp += (nb[i] - 48) * pow((float)10,len-i-1);
}
// Y lo reconvertimos a std::string en forma hexadecimal!
std::stringstream ss;
ss << std::hex << temp;
ss >> nb;
std::cout << nb << std::endl; // Voilà, ya está.
}
¡Diviértete! No dudes en preguntar si tienes más preguntas.
-Aghaster
www.planetcpp.info
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
int main()
{
std::cout << "Introduce un número: ";
std::string nb;
std::cin >> nb;
// Convertimos de std::string a entero
int temp = 0;
int len = nb.length();
for(int i = 0; i < len; i++)
{
temp += (nb[i] - 48) * pow((float)10,len-i-1);
}
// Y lo reconvertimos a std::string en forma hexadecimal!
std::stringstream ss;
ss << std::hex << temp;
ss >> nb;
std::cout << nb << std::endl; // Voilà, ya está.
}
¡Diviértete! No dudes en preguntar si tienes más preguntas.
-Aghaster
www.planetcpp.info
Hola,
Puedes hacer algo así:
Y si tienes que convertir 'a5' en 0xa5
Necesitas hacer:
hex= (convert('a') << 4) + convert('5');
Porque para la a, que corresponde a 10 *(16^1), también puedes hacer 10 << 4
Puedes hacer algo así:
int convert(char caracter) { char cosa[]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a','b','c','d','e','f'}; int i; for (i=0;i<sizeof(cosa);i++) { if (caracter == cosa[i]){ return i; } } //No se encontró coincidencia return -1; } Y si tienes que convertir 'a5' en 0xa5
Necesitas hacer:
hex= (convert('a') << 4) + convert('5');
Porque para la a, que corresponde a 10 *(16^1), también puedes hacer 10 << 4
este programa no funciona en todos los casos:
primero, el tamaño de la cadena en hexa así convertida está limitado
además, no permite convertir una cadena que contenga espacios, en cuanto el algoritmo detecta un espacio se detiene y el resto de la cadena no se convierte.
¿Cómo puedo resolver este problema? Ayúdenme, por favor. Si tienen alguna idea al respecto, no duden en responderme, les estaré muy agradecida.
Gracias de antemano.
primero, el tamaño de la cadena en hexa así convertida está limitado
además, no permite convertir una cadena que contenga espacios, en cuanto el algoritmo detecta un espacio se detiene y el resto de la cadena no se convierte.
¿Cómo puedo resolver este problema? Ayúdenme, por favor. Si tienen alguna idea al respecto, no duden en responderme, les estaré muy agradecida.
Gracias de antemano.
Justo una precisión: los costos y otros flujos son lo que hay de más lento... si quieres algo rápido utiliza los sprintf().
Salam,
Penso que el código a continuación puede ayudarte:
#include<stdio.h>
void main()
{
char ch[33];
int i;
printf("\nDecimal\tHexadecimal\n----------------------------");
for(i=7;i<20;i++)
{
sprintf(ch,"%x",i);
printf("\n%d\t :\t%s",i,ch);
}
}
Allah mo3ine
Penso que el código a continuación puede ayudarte:
#include<stdio.h>
void main()
{
char ch[33];
int i;
printf("\nDecimal\tHexadecimal\n----------------------------");
for(i=7;i<20;i++)
{
sprintf(ch,"%x",i);
printf("\n%d\t :\t%s",i,ch);
}
}
Allah mo3ine
Pero hay un problema, std::hex solo convierte una variable int y no una cadena, lo que quería es convertir un std::string.
Aquí está la función que estoy utilizando ahora:
¡Y funciona de maravilla! Gracias por sus respuestas.
std::string string_hex(std::string buffer){ // convierte un string en un string hexadecimal std::ostringstream oss; // inicializa un string stream que almacena la salida de std::hex for (std::string::const_iterator i = buffer.begin(); i != buffer.end(); ++i) // realiza un bucle carácter por carácter { oss << std::hex << static_cast<int>(*i); // almacena la salida de std::hex en oss } return(oss.str()); } ¡Y funciona de maravilla! Gracias por sus respuestas.
A priori, nadie propone la solución simple sin algoritmo(..) que permitiría mostrar un int (ej: 486) en binario (486d = 111100110b) (y no en hexadecimal, eso es fácil...).
Pensaba encontrar un método rápido que evite tener que hacer una o varias conversiones intermedias o bucles, un paso a hexadecimal o leer bit a bit un entero y convertirlo en char y concatenar poco a poco... pfff.
Debe haber un método en C++ que haga eso directamente... ¿no?
Pensaba encontrar un método rápido que evite tener que hacer una o varias conversiones intermedias o bucles, un paso a hexadecimal o leer bit a bit un entero y convertirlo en char y concatenar poco a poco... pfff.
Debe haber un método en C++ que haga eso directamente... ¿no?
lami20j
Hola, tengo un gran problema y te escribo para pedirte que me ayudes. ¿Puedes enviarme un programa en C que convierta la base decimal a la base binaria, octal y hexadecimal, y viceversa? Por favor, ayúdame. Aquí está mi MSN: star_1987_4@hotmail.com
```