Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Number2IP (https://www.delphipraxis.net/108795-number2ip.html)

kcx 19. Feb 2008 19:00


Number2IP
 
Hallo,

Ich habe eine Funktion geschrieben, die eine IP Adresse in eine Zahl verwandelt:
Delphi-Quellcode:
uses StrUtils, Math;

function IP2Number(const sIP: String): Extended;
var
  iPos, iPrevPos, iNumber, i: Integer;
begin
  Result := 0;
  iPos := 0;
  iPrevPos := 0;
  for i := 1 to 4 do
  begin
    if i = 4 then
      iPos := Succ(Length(sIP))
    else
      iPos := PosEx('.', sIP, Succ(iPos));
    iNumber := StrToInt(Copy(sIP, Succ(iPrevPos), Pred(iPos - iPrevPos)));
    Result := ((iNumber Mod 256) * Power(256, (4 - i))) + Result;
    iPrevPos := iPos;
  end;
end;
Num schaffe ich es aber nicht das Gegenstück zu diesem Code zu schreiben :oops: , also
Delphi-Quellcode:
function Number2IP(const eNumber: Extended): String;
begin

end;
Es scheitert immer an der letzten Zahl.
Hoffe mir kann jemand helfen.

Danke

thkerkmann 19. Feb 2008 19:15

Re: Number2IP
 
Hi,

warum nimmst du extended als Zahlenformat und nicht Cardinal. Das würde nämlich genau passen und dann wird's auch einfach...

Gruss

kcx 19. Feb 2008 19:24

Re: Number2IP
 
Zitat:

Zitat von thkerkmann
Hi,

warum nimmst du extended als Zahlenformat und nicht Cardinal. Das würde nämlich genau passen und dann wird's auch einfach...

Gruss

Weil die Function "Power" ein Extended zurückliefert...
Inwiefern wirds dadurch einfacher?
Einfach ist es bestimmt, ich komm nur nicht drauf. :gruebel:

thkerkmann 19. Feb 2008 19:38

Re: Number2IP
 
Du brauchst doch Power nicht dazu....

Eine IP Adresse besteht aus 4 Zahlen im Bereich von 0..255 was also 4 byte entspricht.
Passt also genau in einen Cardinal rein.

Du hast ja schon in deiner ersten Funktion die Zahlen ermittelt. Durch geschicktes shiften kannst Du sie in ein Cardinal zusammenführen.

Umgekehrt lassen sich die 4 byte aus einem Cardinal natürlich ganz einfach wieder herausholen.
Die Zauberworte für diese Funktionen heissen SHL SHR AND und OR.

Du wirst es schaffen :thumb: ....

Gruss

kcx 19. Feb 2008 20:12

Re: Number2IP
 
Danke thkerkmann,

//edit
Problem gelöst. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr.

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