Función C++ de conversión a hexadecimal

Resuelto
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro -  
 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

Aghaster Mensajes publicados 26 Estado Miembro 25
 
¡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
20
lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
 
Tienes razón, partí de la respuesta de hamzafes, ni siquiera me di cuenta de que la pregunta era para C++.

lami20j
0
sil vous plair aidez moi
 
```html

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

```
0
Aghaster Mensajes publicados 26 Estado Miembro 25
 
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
7
kilian Mensajes publicados 8675 Fecha de registro   Estado Moderador Última intervención   1 526
 
Hola,

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
6
nesssta Mensajes publicados 2 Estado Miembro 1
 
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.
1
Astraya
 
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().
1
hamzafes
 
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
0
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro 27
 
Gracias, pero no quería mostrar el resultado en la pantalla, sino almacenarlo en una variable.
0
lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
 
Hola,

Eso es exactamente lo que hace sprintf.

sprintf - escribe un texto formateado en una cadena en lugar de la pantalla.
sprintf(Var,"Resultado =%X",i);
El resultado se almacena en la variable Var

 sprintf(ch,"%x",i); 
por lo tanto, hamzafes almacenó el resultado en la variable ch.
0
kilian Mensajes publicados 8675 Fecha de registro   Estado Moderador Última intervención   1 526
 
Sí, pero él quiere convertir "1a" en 0x1a
Es lo contrario de lo que hace sprintf().
0
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro 27
 
Gracias por sus respuestas, voy a usar sprintf.
0
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro 27
 
gracias Aghaster, había olvidado que estaba programando en C++ :P.
0
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro 27
 
Pero hay un problema, std::hex solo convierte una variable int y no una cadena, lo que quería es convertir un std::string.
0
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro 27
 
Gracias.
0
DarKPhoeniX
 
¿Por qué no utilizas un istringstream para tu función de conversión de string a decimal?
0
bouazza Mensajes publicados 203 Fecha de registro   Estado Miembro 27
 
Aquí está la función que estoy utilizando ahora:
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.
0
hsssss
 
cómote en la versión 6.0
0
jamlavie
 
Salut à tous, je cherche un algorithme qui fait la conversion de binaire vers les autres bases ou le contraire "s'il te plaît, je veux un algorithme qui est écrit en Pascal" et merci d'avance.
0
jampalavie
 
y publica tus mensajes en los temas adecuados
0
Marcel_fait_du_tricot
 
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?
0