Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Conversion de números (https://www.clubdelphi.com/foros/showthread.php?t=60512)

donald shimoda 04-10-2008 03:44:21

Conversion de números
 
Necesito Convertir de un HEX formato IEEE de 4 bytes a Float en delphi. Probe con algunas libs que convierten a double, pero el código esta armado para HEX de 8 bytes o 16 nibbles, y los resultados fueron incorrectos por completo.

Si alguien conoce alguna librería para realizar esta función se los agradezco porque estoy más perdido que perro en cancha de bochas. :o

Saludos

egostar 04-10-2008 03:58:38

Hola

Tal vez te puede servir esto

http://www.merlyn.demon.co.uk/programs/hexfloat.pas

Salud OS

donald shimoda 04-10-2008 04:57:08

Cita:

Empezado por egostar (Mensaje 318105)
Hola

Tal vez te puede servir esto

http://www.merlyn.demon.co.uk/programs/hexfloat.pas

Salud OS

Gracias amigo, con esa librería estoy luchando sin éxito hasta ahora. Quizas sea la hora pero nada...:(

Probe otra librería con este código:

Código Delphi [-]
  FUNCTION HexToDouble(CONST hex:  STRING):  DOUBLE;
    VAR
      d      :  DOUBLE;
      Overlay:  ARRAY[1..2] OF LongInt ABSOLUTE d;
  BEGIN
    IF   LENGTH(hex) <> 16
    THEN raise EIEEEMath.Create('Invalid hex string for HexToDouble');

    Overlay[1] := StrToInt('$' + COPY(hex, 9, 8));
    Overlay[2] := StrToInt('$' + Copy(hex, 1, 8));

    RESULT := d
  END {HexToDouble};

Es para un string de entrada de 16 chars, 8 bytes, no encuentro la manera de pasarlo a 8 chars, 4 bytes de entrada. Mañana me pondré a leer.

Gracias nuevamente.

donald shimoda 06-10-2008 21:14:38

Cita:

Empezado por egostar (Mensaje 318105)
Hola

Tal vez te puede servir esto

http://www.merlyn.demon.co.uk/programs/hexfloat.pas

Salud OS

Por cierto, se resolvió demasiado fácil (amo pascal). Por si a alguien le sirve:

Código Delphi [-]
function HexToSingle(const hex:  string):  Single;
var
  d      :  Single;
  Overlay:  Longword absolute d;
begin
  if (Length(hex)<>8) then
    raise Exception.Create('Funcion hextosingle largo de string de entrada incorrecto');
  Overlay := StrToInt('$' + Copy(hex, 1, 8));
  result := d
end;

function Singletohex(const d: single): string;
var
  Overlay:  longword absolute d;
begin
  result := IntToHex(Overlay, 8)
end;

Elite237 07-10-2008 19:09:02

Error el guardar datos
 
Hola, veo que tu hiciste que lograste la conversion, y quiero comentarte mi problema, fijate que quiero guardar mis datos en la bd, pero me sale un error que dice
Código Delphi [-]
invalid variant type conversion

aunque no entiendo el porque, ya que este mismo procedimiento lo utilizo para guardar otros datos, mi codigo es el siguiente:
Código Delphi [-]
var
i:string;
begin
if form11.table1.locate('preg_clave',edclave.text,[])then
             begin
              edclave.clear;
              showmessage('La clave ya existe')
             end
              else
                begin
                    i:=copy(cmbEvaluacion.text,0,pos('-',cmbEvaluacion.text)-1);
                    i:=copy(cmbSeccion.text,0,pos('-',cmbSeccion.text)-1);
                    form11.table1.insert;
                    form11.table1.fieldvalues['preg_evaluacion']:=i;
                    form11.table1.fieldvalues['preg_secc']:=i;
                    form11.table1.fieldvalues['preg_clave']:=EdClave.text;
                    form11.table1.fieldvalues['preg_descripcion']:=EdPregunta.text;
                    form11.table1.post;
                    cmbEvaluacion.clear;
                    cmbSeccion.clear;
                    edClave.clear;
                    edPregunta.clear;
                    showmessage('Los datos se guardaron con exito!');
                 end;
Utilizo un TTable, TDataBase, y un TQuery. En mi formulario tengo 2 combobox y 2 edit, y un boton para guardar.Saludos

donald shimoda 07-10-2008 19:12:25

Cita:

Empezado por Elite237 (Mensaje 318694)
Hola, veo que tu hiciste que lograste la conversion, y quiero comentarte mi problema,

Amigo, tu problema no tiene nada que ver con el mio. Para la proxima abre un nuevo hilo para mantener la coherencia del foro.

Cita:

Empezado por Elite237 (Mensaje 318694)
Utilizo un TTable, TDataBase, y un TQuery. En mi formulario tengo 2 combobox y 2 edit, y un boton para guardar.Saludos

Primera regla del buen diseñador delphi : evita fieldvalues como a la peste. usa AsLoQueSea en su lugar.

Saludos

Elite237 07-10-2008 19:16:03

Disculpame, no fue mi intención revolver este hilo, solo que a veces posteo, y no me doy cuenta de que ya hay un hilo abierto y pense que mi problema entraria en este hilo, pero una vez mas disculpame y gracias por hacerme ver mi error. Saludos

donald shimoda 07-10-2008 19:57:48

Cita:

Empezado por Elite237 (Mensaje 318699)
Disculpame, no fue mi intención revolver este hilo, solo que a veces posteo, y no me doy cuenta de que ya hay un hilo abierto y pense que mi problema entraria en este hilo, pero una vez mas disculpame y gracias por hacerme ver mi error. Saludos

No hay problema, a todos nos pasa.

Espero te sirva el concejo con los fields. Saludos


La franja horaria es GMT +2. Ahora son las 04:10:54.

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