TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 18 de Marzo de 2014, 17:38:47

Título: Array ascii a array hex
Publicado por: Medusa en 18 de Marzo de 2014, 17:38:47
Hola, alguien me podría decir como convertir un array de datos ascii a otro array de datos hex

Por ejemplo:
 
de
Código: [Seleccionar]
char RXC[]={"C8373B0C"};
a
Código: [Seleccionar]
int RXI[]= {0xC8, 0x37, 0x3B, 0x0C};
Estoy trabajando con este codigo:
Código: [Seleccionar]
#include <18F4520.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20000000)
#use rs232(baud=19600, xmit=PIN_C6, rcv=PIN_C7, ERRORS, timeout=5000)// RS232 Estándar

#include <stdlib.h>

int Msg[]={"C8373B0C"};
char Buffer[10];
int Dato[5];

int8 i,j,x;

void MsgRX(){
   x = strlen(Msg)/2;
   for (i=0; i<x; i++){
      for (j=0; j<2; j++){
         Buffer[j] = Msg[j+2*i];
      }
      Dato[i] = atoi(Buffer);
   }   
}

void main(){
   MsgRX();
   delay_ms(100);

while(TRUE);
}

Solo trabaja para string decimales, para string hex no trabaja...
Título: Re: Array ascii a array hex
Publicado por: BrunoF en 21 de Marzo de 2014, 22:08:42
Hola,

bueno tiremos un poco de código al aire  :mrgreen:

Código: C#
  1. void MsgRX(){
  2.    unsigned int8 i,d,x;
  3.  
  4.    x = strlen(Msg);
  5.    for (i=0; i<x; i++){
  6.       d = Msg[i];                       //leer caracter actual
  7.       if(d >= 'A' && d <= 'F')
  8.          d-= (unsigned int8)'A';        //'A' - 'F'
  9.       else if(d >= 'a' && d <= 'f')
  10.          d-= (unsigned int8)'a';        //'a' - 'f'
  11.       else if(d >= '0' && d <= '9')
  12.          d-= (unsigned int8)'0';        //'0' - '9'
  13.       else
  14.         d = 0;          //caracter de entrada no hexadecimal, inválido
  15.  
  16.       if(i % 2)
  17.               Dato[i/2]|= d;
  18.         else
  19.               Dato[i/2] = d<<4;
  20.    }    
  21. }

Saludos
Título: Re: Array ascii a array hex
Publicado por: planeta9999 en 21 de Marzo de 2014, 23:10:37


Este es el código que yo utilizo en mis programas para leer un fichero .HEX, y pasar los códigos ASCII de dos en dos a una cadena numérica, que luego lo leas en decimal o hexadecimal es lo de menos, porque internamente están en binario.


Código: [Seleccionar]

int ii=0;
char temp[5] = {'0','x',NULL, NULL, NULL};
memset(registro_trabajo, NULL, 255); // Inicializo matriz trabajo a NULL

// Cargo matriz de trabajo con registro de entrada Ascii a Hex
for (int i=1; i<=strlen(registro_entrada); )
{
temp[2]= registro_entrada[i++];
temp[3]= registro_entrada[i++];
sscanf(temp, "%x", &registro_trabajo[ii++]);
}
total_elementos = ii-1; // total elementos cargados en tabla de trabajo