Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Float Zahlen in Hex Zahlen umwandeln (https://www.delphipraxis.net/177913-float-zahlen-hex-zahlen-umwandeln.html)

danielA 6. Dez 2013 09:07

AW: Float Zahlen in Hex Zahlen umwandeln
 
Hallo Himitsu,

vielen Dank für das Beispiel.

Die Sache mit Absolute scheint wirklich sehr interessant zu sein. Das werde ich mir merken.

Beim zweiten Beispiel...
Nun ja ich finde es trotzdem Merkwürdig, dass der Compiler da meckert. Belegen doch beide Werte gleich viel Speicher. Vermutlich konnte man sich nicht einigen ob man bei diesem Cast nur den Ganzzahligen Wert oder den binär betrachteten Wert des belegten Speichers zurückgibt.
Eine Möglichkeit diesen Cast trotzdem auszuführen währe dann aber noch folgende:

Code:

var
  SingleVar: Single;
begin
  SingleVar := 1.1234;
  ShowMessage(IntToHex(Integer(Pointer(SingleVar)),8));
end;
Dabei geht aber leider wieder die Typüberprüfung verloren. Da SingleVar von jedem Typ sein könnte.
Mir persönlich gefällt dann Deine Variante mit Absolute doch besser, wenn keine Bytevertauschungen (Big <-> Little Endian) durgeführt werden müssen.

himitsu 6. Dez 2013 10:08

AW: Float Zahlen in Hex Zahlen umwandeln
 
Es kann sein, daß der Compiler dort eine Typprüfung in der Konvertierung vornimmt. Macht die Compilermagic bei einigen Typen.
Wie z.B. auch zwischen ANSI- und UnicodeStrings, wobei dort nur eine Warnung angezeigt wird, daß man da auspassen sollte.

Man kann auch ganz "böse" sein und sämtliche Prüfungen umgegehn.
Delphi-Quellcode:
var
  SingleVar: Single;
begin
  SingleVar := 1.1234;
  ShowMessage(IntToHex(PInteger(@SingleVar)^, 8));
end;
Aber genauso, wie beim Absolute, sollte man beim wilden Rumgepointere unbedingt aufpassen, was man macht und möglichst auch verstehn warum man es so macht.

PS: [DELPHI]...[/DELPHI]

p80286 6. Dez 2013 10:45

AW: Float Zahlen in Hex Zahlen umwandeln
 
Zitat:

Zitat von danielA (Beitrag 1238731)
Mir persönlich gefällt dann Deine Variante mit Absolute doch besser, wenn keine Bytevertauschungen (Big <-> Little Endian) durgeführt werden müssen.

Vorsicht! bei Variablendeklarationen mit Absolute hast Du zwei Variablen, die den gleichen Inhalt haben, wenn Du das "unterwegs" vergisst, kannst Du durchaus ungewollte Effekte erreichen.
Und im Übrigen gilt natürlich
Zitat:

Aber genauso, wie beim Absolute, sollte man beim wilden Rumgepointere unbedingt aufpassen, was man macht und möglichst auch verstehn warum man es so macht.
Gruß
K-H

danielA 6. Dez 2013 11:49

AW: Float Zahlen in Hex Zahlen umwandeln
 
Zitat:

Vorsicht! bei Variablendeklarationen mit Absolute hast Du zwei Variablen, die den gleichen Inhalt haben, wenn Du das "unterwegs" vergisst, kannst Du durchaus ungewollte Effekte erreichen.
Ne ne dass beide Variablen den selben Speicher referenzieren und das nur benutzt werden sollte, wenn man weiß was man tut ist schon klar.

Ja und das Thema Strings ist ja mittlerweile wirklich zu einer Wissenschaft für sich geworden. Ich selbst bin gerade am Umstieg von Delphi6 auf die XE2 dabei und habe noch einige 100000 Zeilen Quellcode zu konvertieren. Im allgemeinen macht Delphi das ja alles von alleine aber gerade Low Level programmierte Sachen, in denen mit String bzw. PChar gearbeitet wurde, ist doch einiges an eingriffen notwendig.

Wenn ich das richtig verstanden habe ist der Typ AnsiString in erster Linie für SingleByte Zeichensätze gedacht. Unterstützt aber auch Multibyte, während UnicodeStrings von Vorneherein als Multibytezeichensatz angenommen werden kann. Wobei UnicodeStrings auch AnsiStrings enthalten können. Eine Warnung scheint mir deshalb doch auch ziemlich Sinnvoll.

Aber ich glaube ich werde jetzt Off Topic ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Seite 3 von 3     123   

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