| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Span_cho

Registrado: 16 Nov 2004 Mensajes: 25 Ubicación: Colombia
| Publicado: 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
| Publicado: 31/01/2005 4:50 pm | | | Título: |
| 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
| Publicado: 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
| Publicado: 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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |