AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Float Zahlen in Hex Zahlen umwandeln
Thema durchsuchen
Ansicht
Themen-Optionen

Float Zahlen in Hex Zahlen umwandeln

Offene Frage von "danielA"
Ein Thema von satfer · begonnen am 5. Dez 2013 · letzter Beitrag vom 6. Dez 2013
Antwort Antwort
Seite 3 von 3     123   
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#21

AW: Float Zahlen in Hex Zahlen umwandeln

  Alt 6. Dez 2013, 10:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#22

AW: Float Zahlen in Hex Zahlen umwandeln

  Alt 6. Dez 2013, 11:08
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]
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#23

AW: Float Zahlen in Hex Zahlen umwandeln

  Alt 6. Dez 2013, 11:45
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
danielA

Registriert seit: 10. Jun 2002
Ort: Hamburg
72 Beiträge
 
Delphi XE7 Enterprise
 
#24

AW: Float Zahlen in Hex Zahlen umwandeln

  Alt 6. Dez 2013, 12:49
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 ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:27 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