Lazarus

Other Languages => Spanish => Topic started by: crisares on February 12, 2020, 08:45:55 pm

Title: Como convertir valor hexadecimal a su valor ascii
Post by: crisares on February 12, 2020, 08:45:55 pm
Hola a todos
Quisiera saber si alguno me puede ayudar con esto que intento hacer.

A continuacion les muestro como obtengo el valor de la posicion 26 del buffer que es 39h y la muestro en txtChasis... lo que quiero hacer es mostrar el valor ascii correspondiente a 39h que es 9 en lugar del valor hexadecimal.
En realidad necesito mostrar los 17 bytes selecionados en la foto pero en su valor ascii

Code: Pascal  [Select][+][-]
  1.  
  2. Var
  3. ch1,v:byte;
  4. ch1f:string;
  5.  
  6. Begin
  7.         MPHex.ReadBuffer(ch1, 26, SizeOf(v));
  8.         ch1f := format('%1:.2x',[26,ch1]);
  9.         txtChasis.Text:= ch1f;
  10. end;
  11.  
  12.  


Title: Re: Como convertir valor hexadecimal a su valor ascii
Post by: lucamar on February 12, 2020, 08:58:57 pm
Muy básicamente, sin testar la entrada ni que no haya errores, algo como:
Code: Pascal  [Select][+][-]
  1. function CharFromHex(const Hexa: String): Char;
  2. begin
  3.   if not Hexa.StartsWith('$') then
  4.     Hexa := '$'+Hexa; {No estoy seguro de si esto es necesario}
  5.   Result := Chr(StrToInt(Hexa));
  6. end;

Eso es todo. ;)
Title: Re: Como convertir valor hexadecimal a su valor ascii
Post by: crisares on February 13, 2020, 01:42:06 pm
Gracias por tu respuesta.. pero no logro que me funcione... voy a seguir avanzando (Aprendiendo) en este lenguaje que es nuevo para mi y volvere a resolver esta parte de mi programa mas adelante.
Title: Re: Como convertir valor hexadecimal a su valor ascii
Post by: lucamar on February 13, 2020, 03:47:07 pm
Perdona, hay un pequeño error en la declaración; debería ser:

Code: Pascal  [Select][+][-]
  1.     function CharFromHex(Hexa: String): Char;
  2.     begin
  3.       if not Hexa.StartsWith('$') then
  4.         Hexa := '$'+Hexa; {No estoy seguro de si esto es necesario}
  5.       Result := Chr(StrToInt(Hexa));
  6.     end;

El parámetro Hexa no pude ser const si queremos que sea modificable dentro de la función. Es lo que pasa cuando no se prueban las cosas :-[

Con esa pequeña modificación funciona como debe, como se ve en la imagen adjunta.


ETA:

Ahora que me fijo, ya estás cogiendo al valor como byte así que todo lo que tienes que hacer para tener el carácter es llamar a Chr(ch1).

Pues sí que ando yo fino  :-[
Title: Re: Como convertir valor hexadecimal a su valor ascii
Post by: garlar27 on February 13, 2020, 04:14:19 pm
Yo uso esta función que hice hace años. Tal vez se pueda mejorar pero funciona ...

El parámetro de entrada es una cadena hexdecimal y se asume que ESTÁ COMPLETA, QUE NO ESTÁ DESFAZADA, QUE CADA VALOR HEXADECIMAL ESTÁ REPRESENTADO POR 2 BYTES, QUE NO CONTIENE CARACTERES DIFERENTES DE 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D ,E, F.
Code: Pascal  [Select][+][-]
  1. function HexToStr(H: string): string;
  2. var
  3.    i: Integer;
  4. begin
  5.    Result := '';
  6.    if odd(Length(H)) then begin
  7.       Exit;
  8.    end;
  9.    for i := 1 to Length(H) div 2 do begin
  10.       Result := Result + Chr(Hex2Dec(H[(i * 2) -1] + H[i * 2]));
  11.    end; {<--- del for i }
  12. end; {<--- HexToStr }
  13.  
Title: Re: Como convertir valor hexadecimal a su valor ascii
Post by: crisares on February 13, 2020, 06:32:10 pm
Gracias a todos... ya logre mostrar el resultado.. lo hice de otra manera.
Les muestro como...

Code: Pascal  [Select][+][-]
  1. var
  2. wpin,w:word;
  3. wpinf:string;
  4. Begin        
  5.         MPHex.ReadBuffer(wpin,50,sizeof(w));//obtengo los 2 bytes del buffer en variable tipo word
  6.         wpinf:= format( '%1:d' ,[50,wpin]);//paso a decimal el resultado
  7.         txtpin.Text:=wpinf;//muestro resultado
  8. end;
  9.  
  10.  
TinyPortal © 2005-2018