La Web del Programador: Comunidad de Programadores
 
    Pregunta:  50196 - DUDA AL LEER EL PUERTO SERIE
Autor:  Alberto Lopez
Hola, estoy realizando una aplicacion con el puerto serie para C++ Builder. Desde un módulo externo envio por radiofrecuencia a traves de una UART un dato en binario. Este dato por ejemplo es 0010 0101 (el nº25 hexadecimal) y lo quiero representar en una Label. Si yo he enviado 25, tengo que representar 25 pero me representa caracteres del codigo ASCII.
Para capturar por el puerto serie estoy usando el componente CPortLib y este es el codigo con el que leo el puerto:

AnsiString a; // Declaro una variable
ComPort1->ReadStr(a,Count); // Leo el puerto serie cargando el valor en 'a'
Label8->Caption = a; // Represento el valor leido del puerto en la Label8

Creo que como la variable 'a' es de tipo String se representa como un caracter, pero no se como tratarla para que aparezcan 2 caracteres que formen 25 y se represente el valor que he enviado desde el exterior.

Un saludo y gracias

  Respuesta:  sergio iván castellanos
Parece que solo te falta convertir de hexadecimal a caracteres.
El valor que tu tienes está en código BCD, hay que hacer lo siguiente:

int valor;
char D1, D2;

valor = a; // para leer el valor entero que tienes en a,
//si todo va bien en valor devemos obtener un 37 (32+5 ó 2x16 + 5)

// ahora recuperamos el primer nibble (donde está el 5)
D1 = a & 0x0F;
// y el segundo nibble (donde está el 2)
D2 = a >> 4;

//ahora en un Label puedes agregar D1 y D2:
Label1->Caption = D2 + D1;

Suerte y si necesitas mas ayuda escríbeme con confianza.