Autor Tema: Conversión de hexa a binario  (Leído 10293 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Conversión de hexa a binario
« en: 19 de Diciembre de 2011, 10:36:37 »
Hola a todos. Queria saber si el compilador CCS C tiene alguna función para pasar numeros en formato hexadecimal a binario.

Gracias.
« Última modificación: 19 de Diciembre de 2011, 10:46:40 por Pchuqui_1 »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Conversión de hexa a binario
« Respuesta #1 en: 19 de Diciembre de 2011, 11:33:09 »
yo uso la calculadora de windows en modo programador

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Conversión de hexa a binario
« Respuesta #2 en: 19 de Diciembre de 2011, 11:57:26 »
Amigo, la verdad no entiendo para que realizar esta conversión, si yo en CCS o cualquier compilador escribo lo siguiente

variable = 64, el compilador asume que el número decimal cargado es igual al h40, al binario 01000000 y al caracter @,

Bueno, si es eso a lo que usted se refiere, claro está

Saludos.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Conversión de hexa a binario
« Respuesta #3 en: 19 de Diciembre de 2011, 12:58:02 »
Pchuqui_1:
              Cuenta un poco más para que quieres hacer la conversión.  Para ver si lo que necesitas es aprender a hacer la conversión de hex a bin. O más precisamente que es lo que quieres hacer con una función como esa. Ya que para guardar un valor en hex o en bin en una variable sólo debes poner el 0x o el 0b delante, respectivamente.
            Tené presente que una variable declarada como de tipo entero se puede guardar un mismo valor pero representado en diferentes bases. Sea binaria, decimal, octal, o en hexa.

por ejemplo: para guardar en hexa:

char miVariable= 0xFF;

y para guardarla en binario asi:

char miVariable= 0b11111111;

etc. etc.

Es decir el mismo número  0xFF o el 0b11111111 o el 255 decimal se guarda en la variable representado en binario. Sólo que por comodidad el compilador te permite representar el dato en diferentes bases. Pero en definitiva el dato guardado en el pic es el mismo.
Ya que sea la base en la que esté internamente guardará el entero en binario.

También podrías tener guardado el dato en un array de chars como ser: "FF\0" . Pero para ello debés usar la función atoi() de C que convierte dicha cadena FF en un entero.


char Buffer[3]="ff\0";

miVariable=atoi(Buffer);


Supongo debes estar trabajando con números en formado BCD

quizá también te pueda ayudar este post.
http://www.todopic.com.ar/foros/index.php?topic=35228.0

            Saludos.
                     Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: Conversión de hexa a binario
« Respuesta #4 en: 19 de Diciembre de 2011, 13:44:11 »
Gracias por contestar. Disculpen si no me expliqué. Recibo los datos por RS232 en hexadecimal y necesito convertirlo a binario, porque los tengo que enviar a un registro de desplazamiento "4094". Por ejemplo recibo el dato 0x20, de ese dato tengo que obtener el 2 y el 0 (Unidad y decena) por separado. Para hacer eso lo paso a binario que seria 0b00100000, luego para obtener la unidad y la decena se me ocurrió hacer lo siguiente:

Para obtener el 2
0b00100000 >>> DATO RECIVIDO 0x20
0b00000010 >>> LO ROTO 4 veces a la izquierda
0b00001111 >>>> APLICO MASCARA AND para deshacerme de los 4 bits de mas peso
0b00000010 >>>> RESULTADO

Para obtener el 0

00100000     >>>> DATO RECIBIDO
00001111    >>>> APLICO AND   
00000000    >>>> RESULTADO

Y para empezar ha trabajar con esto necesito convertir ese dato recibido en binario, por eso pregunto si hay alguna función en CCS C que lo haga. Espero haber sido mas claro.  :D

Gracias.

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Conversión de hexa a binario
« Respuesta #5 en: 19 de Diciembre de 2011, 16:04:38 »
Pchuqui_1:
 el dato que recibís al leer un carácter desde la usart es un valor codificado en ASCII.
Dicho valor lo vas leyendo de a 1 carácter.
1 caracter en ASCII representa un valor equivalente a un número decimal de 0 a 255 o en hexadecimal de 0 a ff. De acuerdo a la tabla de caracteres ASCII.


En tu ejemplo si recibís "20\0" en realidad recibís dos caracteres ascii el '2' y el '0' mas el final de cadena
El 2 en ASCII está representado por el 0x32 y el 0 por 0x30
No es que recibís todo empaquetado en un solo numero hexa o binario. 0x20 Ok?Los caracteres los vas leyendo de a 1.
Primero lee el 2 que es ox32 y luego lee el 0 que es ox30
Para sacar la decena y la unidad debes restarle 0x30 a cada caracter y te da el valor del dígito que estás buscando.
0x32-0x30 es igual a 2.
0x30-0x30 es igual a 0.
Saludos.

Jukinch
« Última modificación: 19 de Diciembre de 2011, 16:10:58 por jukinch »
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado Pchuqui_1

  • PIC16
  • ***
  • Mensajes: 187
Re: Conversión de hexa a binario
« Respuesta #6 en: 19 de Diciembre de 2011, 16:34:18 »
Hola Jukinch. Gracias por responder. Eso ya lo se y lo comprendo. Solo quiero saber si CCS C tiene incorporado funciones para transformar valores en hexadecimales a binario.
Como esta, que hizo REDPIC. Estoy tratando de usarla pero me da un error en la instrucción "strcopy(ptr,"ff" ); ". Gracias de todas formas. 

Titulo: ASCII Hex to Int
=================

Descripción:

Convierte un carácter ASCII Hex (0..9 A..F) al valor
entero (0..15) correspondiente (4 bits)

Declaración:

#include <stdlib.h>

int  aschex2int(char d);

Función y ejemplo de uso:


<span class="texto_mini">Codigo:</span>--------------------------------------------------------------------------------
int aschex2int(char d){          // Convierte un caracter ascii hex a int

   int r=0;                       // Declaro e inicializo a cero el resultado
   if(isxdigit(d)){               // Si es un digito hexadecimal ...
      if(isdigit(d)){             // si es un digito decimal ...
         r=d-'0';                 // devuelvo su diferencia con el valor ascii del caracter "0"
      }
      if(isalpha(d)){             // si es alfanumerico ...
         d=toupper(d);            // lo paso a mayusculas y ...
         r=10+(d-'A');            // devuelvo 10 mas su diferencia con el valor ascii de la letra "A"
      }
   }
   return(r);
}

   // Ejemplo de uso con 1 caracter

   int x;
   x = aschex2int('F');          // x toma el valor 15


   // Ejemplo de uso con dos caracteres

   char *ptr;
   strcopy(ptr,"ff" );

   int x;
   x =(16*aschex2int(ptr[0]));             // Convierto el dígito mas significativo
   x+=(aschex2int(ptr[1]));                // Convierto el dígito menos significativo
                                           // y lo sumo a lo anterior, x toma el valor 255

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Conversión de hexa a binario
« Respuesta #7 en: 19 de Diciembre de 2011, 17:18:06 »
Pchuqui_1:
                 Cual es el error que te indica el compilador?
Podrías subir el código que has hecho?
                Saludos
                     Jukinch
         
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes