Thema: Delphi HEX nach DWORD umwandeln

Einzelnen Beitrag anzeigen

Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#4

Re: HEX nach DWORD umwandeln

  Alt 9. Dez 2009, 01:24
Moin moin,
Zitat von daywalker299:
...
Also wenn ich meine IP Adresse zerlege bzw. die Punkte entferne und dann nur mit der Integer Zahl sortiere, ist Ergebnis falsch. Denn 192.168.2 würde nach 192.168.100 kommen, oder?
...
Weil die 2 in deiner IP (192.168.2) ja eigentlich eine 002 ist und deswegen wurde dir vermutlich
vorgeschlagen, die einzelnen Bytes der IP Adresse in einen DWord zu schreiben und dann zu sortieren.

(Warum der Umweg über String, Hex und dann wieder in einen Integer? Meistens liegen die IP-Adressen sowieso
als DWORD bzw. ByteArray vor - dann könnte man gleich sortieren, aber das nur am Rande)

Hier mal ein Beispielcode, der auch das HEX in DWORD zeigt. Dabei dürfte deutlich werden,
das die Umwandlung in einen HEX(String) überflüssig ist.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Type
  TIP = Record
    Case Integer of
      0: (B: Array[0..3] of Byte);
      1: (L: LongWord);
  End;
var
  dw:dword;
  d2:tip;
begin
  // Deine Hexwerte in einen DWORD schreiben
  dw := $00000000; //$00.00.00.00
  dw := dw or ($C0 shl 24); //$C0.00.00.00 oder auch dw := dw or (192 shl 24);
  dw := dw or ($A8 shl 16); //$C0.A8.00.00 oder auch dw := dw or (168 shl 16);
  dw := dw or ($01 shl 8); //$C0.A8.01.00 oder auch dw := dw or (1 shl 8);
  dw := dw or $1D; //$C0.A8.01.1D oder auch dw := dw or 29;
  
  // Methode meines Vorschreibers - hierbei aber auf die Umgedrehte Reihenfolge achten
  d2.B[0]:= 29; // oder auch d2.B[0]:= $1D;
  d2.B[1]:= 1; // oder auch d2.B[1]:= $01;
  d2.B[2]:= 168; // oder auch d2.B[2]:= $A8;
  d2.B[3]:= 192; // oder auch d2.B[3]:= $C0;
  showmessage(inttostr(dw)+#13#10+
              inttostr(d2.L));
end;
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat