Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Operacion con Hexadecimales (https://www.clubdelphi.com/foros/showthread.php?t=52064)

BetoAlonso 09-01-2008 06:43:15

Operacion con Hexadecimales
 
Saludos

Tengo los siguientes dato en hexadecimal

E1 y 68

quisiera que alguien me indique como sumar ambos valores porke los tengo en variables de tipo string.

gracias.

jachguate 09-01-2008 07:53:55

Código Delphi [-]
Resultado := Format('%x', [StrToInt('$' + Valor1) + StrToInt('$' + Valor2])]);

La variable resultado también debe ser un string.

Hasta luego.

;)

BetoAlonso 09-01-2008 16:14:13

Gracias jachguate

Confirmame si el resultado esta en hexadecimal ?


algo mas tengo que llevar a cabo la operacion and deberia ser algo asi resultado= ( HEX( X ) AND 0FF ) , donde X es decimal , el resultado estara en hexadimal que luego se tendra que convertir en decimal

esto veo ke es posible en C pero aki en delphi no tengo idea de como hacerlo.

gracias por tu atencion

jachguate 09-01-2008 16:21:11

Claro que está en hexadecimal, si no para que te lo recomendaría??

Sobre la confusión que tenes entre decimal y hexadecimal, te recuerdo que esa es solo la forma en que veremos a un entero representado como string. La máquina, al final de cuentas, solo trabaja con ceros y unos, es decir, en binario. Así que si ya tenes un entero, no está ni en decimal, ni en hexadecimal, y por tanto no hace falta convertirlo de uno a otro, ni en c, ni en delphi.

Hasta luego.

;)

santiaguinillo 07-02-2008 17:41:19

Hexadecimal y TelSerialPort
 
Hola a todos,

utilizo TelSerialPort para enviar datos por puerto serie (COM1).
Utilizo la función de este componente writestr para enviar datos.

Tengo un problema con este método de envío:

- Resulta que los datos se tienen que recibir en hexadecimal y utilizo un Tedit para escribir los valores transformando el valor con la función STRTOHEX que un forero de clubdelphi escribió o bien strtoint y inttohex.

- La cuestión es que toda esta transformación queda en que cuando me pasa a hexadecimal me pasa la transformación de ASCII a Hexadecimal (http://www.asciitable.com/) de forma que si pongo un 6 en realidad me envía un 36 que según en la tabla es correcto.

- Lo que necesito es enviar un 6 y que sea un 6 hexadecimal, si escribo algo como $6 o $06 o 0x06 siempre me envia un 6 en ascii y queda un 36 hex.

- La única forma que me ha funcionado es escribiendo directamente en código:
SP.writestr(#6);

pero no sé como hacerlo para introducir este tipo de valor desde un TEdit.

¿Cómo podría enviar los datos de forma correcta?

santiaguinillo 07-02-2008 18:29:39

Solución
 
Bueno, pues resulta que #6 es 6 en decimal, que según la tabla ASCII es 6 en hexadecimal.

Si utilizo el tipo Variant y:
var:
variante:variant;
begin
variante := #6;
SP.writestr(variante);
end;
funciona correctamente. Así que tendré que hacer una estructura de transformación de los 127 carácteres que hay en la tabla ascii.

...A no ser que a alguien se le ocurra algo mejor. ;) dios quiera que sí!!!

jachguate 07-02-2008 18:30:09

Supongo que queres enviar caracteres de control (o secuencias de escape) mezcladas con caracteres imprimibles.

Lamentablemente en un Edit no se puede introducir caracteres no imprimibles (menores a ascii 32), no es un asunto de hexadecimal o no hexadecimal.

Cuándo he enfrentado esta situación, he encontrado dos soluciones.

Una, poner otro edit donde se ingrese el valor numérico del caracter que se quiere introducir, (por ejemplo 6) y con un botón, añadir ese caracter a la cadena del edit "a enviar", algo como:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if trim(eCaracter.Text) <> ''
    eDatosEnviar.Text := eDatosEnviar.Text + Chr(StrToInt(eCaracter.Text));
end;

Otra solución es poner un "tablero" de botones que envíen ciertos comandos preestablecidos. Por ejemplo, un botón cuyo caption sea "Encender luz", y cuya implementación podría ser:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  EnviarComando(#6#32 + eParametros.Text);
end;

Por ejemplo... :p

Hasta luego.

;)

santiaguinillo 08-02-2008 09:06:51

Agradecimientos
 
Hola Jachguate,

pues la 2ª idea me ha parecido más interesante por el motivo que explicas de que los 32 primeros carácteres no se pueden representar con un TEdit.

Así que los 127 botones de la tabla ascii se tendrían que hacer a mano.:eek:

Menos mal que puedo utilizar una tabla de transformación (algo como un par de arrays de variant y string o algo por el estilo) y que los botones finalmente no los tengo que hacer.

La comunicación entre el dispositivo está basada en dos organigramas y las posibilidades de respuesta son definidas así que finalmente no tendré que hacer botones si no es para hacer pruebas.

Un saludo y gracias por todo.

egostar 08-02-2008 19:19:26

Cita:

Empezado por santiaguinillo (Mensaje 264283)
Así que los 127 botones de la tabla ascii se tendrían que hacer a mano.:eek:

Menos mal que puedo utilizar una tabla de transformación (algo como un par de arrays de variant y string o algo por el estilo) y que los botones finalmente no los tengo que hacer.

Bueno, hoy me dieron ganas de evitarles la molestia de hacer una tabla ASCII a mano, adjunto encontrarás algo de lo que yo he hecho para obtener los valores decimales y hexadecimales a partir de seleccionar cualquier caracter de una tabla ASCII.

Aunque esto es parte de un desarrollo propio no tengo ningún problema de que lo usen y por supuesto que lo mejoren, quiero decir, me sentiria agradecido de sus comentarios.

Salud OS

santiaguinillo 14-02-2008 01:08:48

Muchísimas gracias egostar,

en cuanto haga pruebas te comento mi opinión.

Un saludo,
santi

FGarcia 26-02-2008 00:26:05

Este hilo se me habia pasado pero muy bueno, hay dudas que tengo sobre esto de los caracteres de control. Jachguate ¿entonces como le hace Hyperterminal para representar los caracteres de control ? He visto que lo hace con una serie de simbolos como caritas, notas musicales y similares ¿existe algun otra tabla de codigos?

Egostar ya baje tu tabla muy buena!!

egostar 26-02-2008 00:40:25

Cita:

Empezado por FGarcia (Mensaje 268577)
Este hilo se me habia pasado pero muy bueno, hay dudas que tengo sobre esto de los caracteres de control. Jachguate ¿entonces como le hace Hyperterminal para representar los caracteres de control ? He visto que lo hace con una serie de simbolos como caritas, notas musicales y similares ¿existe algun otra tabla de codigos?

Los representa con los caracteres ASCII, si ves una tabla ASCII ahi vas a ver las "caritas", tambien depende de la fuente que use.

Cita:

Empezado por FGarcia (Mensaje 268577)
Egostar ya baje tu tabla muy buena!!

Espero te sirva de algo, gracias por bajarla.

Salud OS


La franja horaria es GMT +2. Ahora son las 17:12:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi