Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hex String in Float umwandeln (https://www.delphipraxis.net/51322-hex-string-float-umwandeln.html)

Selecta 10. Aug 2005 15:40


Hex String in Float umwandeln
 
Huhu

Bisher hab ich immer ein Dollarzeichen($) an den Anfang des Strings gestellt und umgewandelt.
StrToInt('$'+'FF');

funktioniert wunderbar

Aber bei StrToFloat('$'+'F00400000A7F') bekomme ich immer einen Fehler.
Ist kein gültiger Gleitkommawert.

Ist die Länge beschränkt?
kann man das anders lösen?

Vielen Dank

Gruss
Selecta

shmia 10. Aug 2005 15:57

Re: Hex String in Float umwandeln
 
Code-Library: :dp:

http://www.delphipraxis.net/internal...ct.php?t=46356

Selecta 10. Aug 2005 16:14

Re: Hex String in Float umwandeln
 
ähm...

Das ist nicht, dass was ich brauche :).
Hab das auch schon ausprobiert, aber aus hyroglyphen kommt bei mir nichts raus. ^^

shmia 10. Aug 2005 16:25

Re: Hex String in Float umwandeln
 
Zitat:

Zitat von Selecta
Das ist nicht, dass was ich brauche :).

Ich habe auch deine Frage nicht richtig gelesen ;-)
StrToFloat erwartet einen String, der nur aus Ziffern, Dezimaltrenner und ggf. Vorzeichen besteht.
Wenn dein Hexstring nicht in einen Integer passt, dann musst du so vorgehen:
Delphi-Quellcode:
function HexStringToFloat(const s:string):Extended;
var
   i : Integer;
begin
   Result := 0;
   for i := 1 to Length(s) do
   begin
      Result := Result * 16.0 + StrToInt('$'+s[i]);
   end;
end;

Selecta 10. Aug 2005 16:42

Re: Hex String in Float umwandeln
 
yeah, danke für die schnelle antwort. :)

Aber hast du deine Funktion getestet?
Ich bekomme eine Fehlermeldung in der nichts drin steht. o_O

Bei dieser Zeile

Result := Result * 16.0 + StrToInt('$'+s[i]);

shmia 10. Aug 2005 16:51

Re: Hex String in Float umwandeln
 
Zitat:

Zitat von Selecta
Aber hast du deine Funktion getestet?
Ich bekomme eine Fehlermeldung in der nichts drin steht. o_O

Ich bastel gerade noch etwas daran rum....
Delphi-Quellcode:
function HexStringToFloat(const s:string):Extended;
var
   i : Integer;
   scale : Extended;
begin
   Result := 0;
   for i := 1 to Length(s) do
   begin
      if s[i] = '.' then
         Continue;
      Result := Result * 16.0 + StrToInt('$'+s[i]);
   end;

   scale := 1.0;
   for i := Length(s) downto 1 do
   begin
      if s[i] = '.' then
      begin
         Result := Result * scale;
      end;
      scale := scale / 16.0;
   end;
end;
Mein Test:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   x : double;
begin
   x := HexStringToFloat(Edit1.Text);
   Edit2.Text := FloatToStr(x);
end;
HexStringToFloat('64.7FFFF') ergibt 100,499999046326; das ist doch richtig, oder ?

brechi 10. Aug 2005 17:02

Re: Hex String in Float umwandeln
 
ne ich glaub eher das die normale IEEE gleitkommadarstellung umgewandelt werden soll
da hat man dann vorzeichen, mantisse und exponent und das sieht ganz anders aus

für nen single einfach mal typecasten:

single(strtoint($FFFFFFFF));

Selecta 10. Aug 2005 17:12

Re: Hex String in Float umwandeln
 
ouou, mit Nachkommastellen weiss ich das nicht, nicht mehr. ;)

Aber gibts da nicht so ein fractional Format?
Ich glaube, ich hab zu Hause noch Unterlagen zu diesem Thema.
Wenn ich es nicht vergesse, post ich morgen wieder.

Und meine Fehlermeldung konnte ich beheben.

for i := 1 und nicht 0 :wall:

Danke Vielmals für deine Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz