Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mi 04.02.04 17:09 
Manchmal ist es von Vortreil einen alten erfahrenen Programmierer zu fragen wie man das Eine in das Andere konvertiert. Alte Programmierer haben oft eine nette alte Funktion parat, meistens noch aus der Turbo Pascal Zeit. Manchmal hat es keinen Vorteil, denn dann bleibt man auf der alten Funktion sitzen; so z.B. auf einer HexToInt[meta]hexadezimal, integer, dezimal[/meta] Funktion.

Aber zuerst zu der IntToHex Funktion:

IntToHex

Diese Funktion liefert bereits Delphi. Zuerst verlangt die Funktion den Integerwert und dann den Formatierungswert[meta]formatieren[/meta]. Der Formatierungswert sagt wie lang der String sein soll, denn in einen String wird die Zahl konvertiert. Ist der Formatierungswert größer als es für die Zahl nötig ist, dann wird das Ergebnis mit führenden Nullen aufgefüllt. Will man keine führenden Nullen, dann genügt eine Null als Formatierungswert. Delphi erhöht den Wert auf das nötigste. So liefert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Hex: String;
begin
  Hex := IntToHex(2560);
  ShowMessage('$' + Hex);
end;


den Wert: $100

und

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var
  Hex: String;
begin
  Hex := IntToHex(2566);
  ShowMessage('$' + Hex);
end;


den Wert: $000100


Jetzt zu der zu der HexToInt Funktion:

HexToInt

Hier kommen die alten Funktionen der alten Programmierer ins Spiel. Als Anfänger hat es mich mal einen Tag Internetrecherche gekostet nach einer HexToInt Funktion zu suchen, da Delphi diese nicht mitliefert. Aus drei verschiedenen chaotischen Funktionen hab ich dann meine eigene entwickelt. Sie war lang, langsam, aber sie hat gut gearbeitet. Bis ich irgendwann mich fragte: wenn IntToHex einen Hex-String liefert, was passiert dann wenn ich einen Hex-String mit StrToIni in einen Integer konvertiere. Klar, man bekommt eine Integerzahl. Delphi liefert also auch eine HexToInt Funktion, aber die ist ein wenig versteckt, bzw. nicht so offensichtlich. Ist allerdings logisch, denn ob ich x := 255 + 255 rechne oder x := $FF + $FF ist Delphi egal. Beides ist für Delphi eine Integerzahl; die eine im Dezimalsystem, die andere im Hexadezimal. So liefert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Hex: String;
  Dez: Integer;
begin
  Hex := 'FF';
  Dez := StrToInt('$' + Hex);
  ShowMessage(IntToStr(Dez));
end;


eine: 255

StrToInt konvertiert also nicht nur "normale" dezimal Zahlen nach Integer, sondern auch Hexadezimalzahlen. Somit ist klar, daß eine extra HexToInt Funktion, die den Hex-String zerlegt und und aus Einzelwerten alles berechnet, Blödsinn.

Allerdings sollte man einige Punkte beachten: Der Hexstring muß immer mit einem "$" Dollarzeichen beginnen und im Wert dürfen nur Zeichen zwischen 0 und F stehen.

Übrigens, das gleiche gilt auch für StrToIntDef Funktion.

Moderiert von user profile iconChristian S.: Meta-Tags und - Wörter eingefügt

_________________
Popov