Recent

Author Topic: Como convertir valor hexadecimal a su valor ascii  (Read 544 times)

crisares

  • New Member
  • *
  • Posts: 39
Como convertir valor hexadecimal a su valor ascii
« 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.  



lucamar

  • Hero Member
  • *****
  • Posts: 2926
Re: Como convertir valor hexadecimal a su valor ascii
« Reply #1 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. ;)
« Last Edit: February 12, 2020, 09:02:53 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 2.0.8/FPC 3.0.4 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

crisares

  • New Member
  • *
  • Posts: 39
Re: Como convertir valor hexadecimal a su valor ascii
« Reply #2 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.

lucamar

  • Hero Member
  • *****
  • Posts: 2926
Re: Como convertir valor hexadecimal a su valor ascii
« Reply #3 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  :-[
« Last Edit: February 13, 2020, 03:57:17 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus 2.0.8/FPC 3.0.4 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

garlar27

  • Hero Member
  • *****
  • Posts: 640
Re: Como convertir valor hexadecimal a su valor ascii
« Reply #4 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.  
« Last Edit: February 13, 2020, 04:16:51 pm by garlar27 »

crisares

  • New Member
  • *
  • Posts: 39
Re: Como convertir valor hexadecimal a su valor ascii
« Reply #5 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