Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus Int64 die Oktette einer IP Adresse berechnen (https://www.delphipraxis.net/75204-aus-int64-die-oktette-einer-ip-adresse-berechnen.html)

jensw_2000 15. Aug 2006 22:19


Aus Int64 die Oktette einer IP Adresse berechnen
 
Moin Moin,

Ich benutze die Funktion MakeIpAddress aus der commctr.pas um den "Wert" einer IP Adresse (String) zu ermitteln.

Delphi-Quellcode:
function GetIpValue(IPS:String):int64;
  var sl:TStringList;
begin
  sl:=TStringList.create;
  try
    // Oktette der IP Adresse splitten
    sl.Delimiter:='.';
    sl.DelimitedText:=IPS;
    if sl.count=4 then
    begin
      // 4 Oktette > IP String könnte gültig sein
      try
        result:=MakeIpAddress(strToInt(sl[0]),strToInt(sl[1]),strToInt(sl[2]),strToInt(sl[3]));
      except
        // ungültiger IP String (IPS) > Result auf Broadcastadresse setzen      
        result:=4294967296;  // 255.255.255.255
      end;
    end
    else begin
      // ungültiger IP String (IPS) > Result auf Broadcastadresse setzen      
      result:=4294967296;  // 255.255.255.255
    end;
  finally
    sl.free;
  end;
end;
Die Funktion liefert folgende Ergebnisse

167772161 // 10.0.0.1
167772162 // 10.0.0.2
3232235777 // 192.168.1.1
3232235778 // 192.168.1.2

Die Ergebnisse entsprechen dem Deizmalwert der IP Adresse.

Code:
Rechenbeispiel 192.168.1.1:

---Oktett 4 - Wert Dezimal 1 ------------------------
  2^0   *  1 = 1
  2^1   *  0
  2^2   *  0
  2^3   *  0
  2^4   *  0
  2^5   *  0
  2^6   *  0
  2^7   *  0
---Oktett 3 - Wert Dezimal 1 ------------------------
  2^8   *  1 = 256
  2^9   *  0
  2^10  *  0
  2^11  *  0
  2^12  *  0
  2^13  *  0
  2^14  *  0
  2^15  *  0
---Oktett 2 - Wert Dezimal 168 ------------------------
  2^16  *  0
  2^17  *  0
  2^18  *  0
  2^19  *  1 = 524288
  2^20  *  0
  2^21  *  1 = 2097152
  2^22  *  0
  2^23  *  1 = 8388608
---Oktett 1 - Wert Dezimal 192 ------------------------
  2^24  *  0
  2^25  *  0
  2^26  *  0
  2^27  *  0
  2^28  *  0
  2^29  *  0
  2^30  *  1 = 1073741824       
  2^31  *  1 = 2147483648
=============================================================
             = 3232235777  // 192.168.1.1

Ich scheitere jetzt den Weg zurück (vom int64 zum String).

Delphi-Quellcode:
function GetAddressString(value:int64):String;
  var okt1,okt2,okt3, okt4: integer;
begin
 
  // Das 4. Oktett kann ich noch selber. :mrgreen:
  okt4 := Value mod 256;
  okt3 := :coder2:
  okt2 := :coder2:
  okt1 := :coder2:
 
  result:=inttostr(okt1)+'.'+inttostr(okt2)+'.'+inttostr(okt3)+'.'+inttostr(okt4);


end;

Kann mir bei den Oktetten 1 bis 3 jemand helfen ?

xaromz 15. Aug 2006 22:39

Re: Aus Int64 die Oktette einer IP Adresse berechnen
 
Hallo,

so geht's:
Delphi-Quellcode:
okt4 := Value and $FF;
okt3 := (Value shr 8) and $FF;
okt2 := (Value shr 16) and $FF;
okt1 := (Value shr 24) and $FF;
Gruß
xaromz

Hawkeye219 15. Aug 2006 23:19

Re: Aus Int64 die Oktette einer IP Adresse berechnen
 
Hallo,

zu später Stunde noch ein Link: klick

Gruß Hawkeye

jensw_2000 15. Aug 2006 23:35

Re: Aus Int64 die Oktette einer IP Adresse berechnen
 
Danke euch Beiden.
@xaromz ... funktioniert
@Hawkeye ... sehr interessanter Link.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 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