/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

convertir numeros decimales a hexadecimales?

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Span_cho



Registrado: 16 Nov 2004
Mensajes: 25
Ubicación: Colombia

MensajePublicado: 31/01/2005 3:42 pm
Título: convertir numeros decimales a hexadecimales?

hola compañeros, lo que pasa es que quiero construir una dll en visual c para utilizarla en visual basic y el problema es este:
en visual basic no hay numeros hexadecimales, y necesito hacer operaciones en numeros hexadecimales, entonces al hacer la dll voy a recibir un vector (arreglo) en numeros decimeles como le hago para convertirlos a hexadecimales, no se si me entienden los numeros del arreglo son decimales como los convierto a hex. y vicevesa para al momento de enviar el resultado osea el mismo arreglo (vector) los convierta a decilmal para que el visual basic los pueda ver y no marque errror.


mil gracias.
_________________
Arriba las mujeres................ para que se cansen ellas
Volver arriba
ngl_80



Registrado: 02 Dic 2004
Mensajes: 18

MensajePublicado: 31/01/2005 4:50 pm
Título:

Very Happy Okey, nada que ver mi respuesta, pero en vb si quieres usar hexadecimales, los valores son indicados asi .. &H00FFCC.
disculpa la respuesta que no sirve de mucha ayuda.
Volver arriba
soloc



Registrado: 25 Ene 2005
Mensajes: 212
Ubicación: Bolivia

MensajePublicado: 01/02/2005 12:59 pm
Título: Solución

Bien...

Para convertir un decimal en hexadecimal por medio de un arreglo te recomiendo convertir el decimal a binario y luego el binario en un un hexadecimal.

Como se hace esto... imagina el numero 71 lo vamos convertir en binario...

71 / 2 = 35 y de resto 1
35 / 2 = 17 y de resto 1
17 / 2 = 8 y de resto 1
8 / 2 = 4 y de resto 0
4 / 2 = 2 y de resto 0
2 / 2 = 1 y de resto 0

Todos los restos se obtienen en C por medio del operador de módulo ( % )

El numero binario que puedes almacenar en el arreglo es:
1000111 que para completar la cantidad de 8 bits será 01000111

Ok? Ahora el número binario lo puedes agrupar cada 4 bits es decir:
0100 0111

Muy bien... Para transformar el binario en hexadecimal haz lo siguiente con cada grupo: De derecha a izquierda multiplica el bit por el valor 1, el siguiente por el doble (2), el siguiente por el doble (4) y el último por el doble (8 ) y luego sumalos.

Grupo uno: 0111
0*8 + 1*4 + 1*2 + 1*1 = 0 + 4 + 2 + 1 = 7

Grupo dos: 0100
0*8 + 1*4 + 0*2 + 0*1 = 0 + 4 + 0 + 0 = 4

El 4 y el 7 los puedes poner en otro arreglo que es tu número hexa...


El numero 71 es 0100 0111 en binario y 47 en hexadecimal.


Como implementas todo esto en C...?

Utiliza una función para transformar de entero a binario y otra de binario a hexadecimal...

Código:
void main()
{
   int Numero = 71;
   int Binario[8];      // Para 8 bits
   int Hexadecimal[2];   // Para 2 numeros en hexadecimal

   ...
   Entero_a_Binario( Numero, Binario);
   Binario_a_Hexa( Binario, Hexadecimal );
   ...

}




Que te vaya bien...
Saludos
Volver arriba
Span_cho



Registrado: 16 Nov 2004
Mensajes: 25
Ubicación: Colombia

MensajePublicado: 01/02/2005 2:22 pm
Título: Re: convertir numeros decimales a hexadecimales?

gracias me pongo a trabajar en eso...
muchas gracias
_________________
Arriba las mujeres................ para que se cansen ellas
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3602
Ubicación: Mexico

MensajePublicado: 01/02/2005 6:48 pm
Título:

Si no es obligatorio realizar la conversion manualmente entonces la solucion mas sencilla es utilizar la funcion sprintf, por ejemplo:

Código:
#include <stdio.h>
#include <stdlib.h>

#define NUM_ELEM 17

int main(void) {
   
   int i;
   char salida[NUM_ELEM][12];
   
   for (i = 0; i < NUM_ELEM; i++)
      sprintf(salida[i], " %02o  %2d  %02x", i, i, i);
   
   puts("Oct Dec Hex");
   for (i = 0; i < NUM_ELEM; i++)
      puts(salida[i]);
   
   return EXIT_SUCCESS;
}


Informacion sobre los distintos formatos utilizados por funciones de entrada y salida la puedes encontrar en esta pagina.

En caso de que tengas que realizar la conversion manualmente solo tienes que dividir repetidamente el numero entre la base (en este caso 16). En cada paso el modulo (o residuo) te dara cada uno de los digitos empezando por el digito menos significativo (mas a la derecha) y terminando con el mas significativo (mas a la izquierda).

Por ejemplo:

Código:
#include <stdio.h>
#include <stdlib.h>

void Dec_To_Hex(char numero[], int *pos, int num);

int main(void) {
   
   int num = 0;
   int pos = 0;
   char cadena[5];
   
   printf("Introduce un numero (0-32767): ");
   fflush(stdout);
   scanf("%d", &num);
   if (num > 32767 || num < 0){
      puts("Numero fuera de rango.");
      return EXIT_FAILURE;
   }
   
   Dec_To_Hex(cadena, &pos, num);
   cadena[pos] = '\0';
   printf("%d (Base 10) == %s (Base 16)\n", num, cadena);
   
   return EXIT_SUCCESS;
}

void Dec_To_Hex(char cadena[], int *pos, int num){
   
   int c;
   
   if (num/16 > 0)
      Dec_To_Hex(cadena, pos, num/16);
   
   c = num%16;
   if (c < 10)
      cadena[*pos] =  '0' + c;
   else
      cadena[*pos] =  'a' + (c - 10);
   
   (*pos)++;
}


Un saludo
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com