PDA

Ver la Versión Completa : Operacion con Hexadecimales


BetoAlonso
09-01-2008, 06:43:15
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
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
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
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:


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:


procedure TForm1.Button1Click(Sender: TObject);
begin
EnviarComando(#6#32 + eParametros.Text);
end;


Por ejemplo... :p

Hasta luego.

;)

santiaguinillo
08-02-2008, 09:06:51
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
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
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.

Egostar ya baje tu tabla muy buena!!

Espero te sirva de algo, gracias por bajarla.

Salud OS