Einzelnen Beitrag anzeigen

Tod787

Registriert seit: 19. Mai 2008
99 Beiträge
 
#19

Re: Mit IP-Adressen rechnen...

  Alt 17. Jul 2008, 10:20
Hab das leider nur halb verstanden. Habe mir eine Lösung mit deiner Methode überlegt allerdings funktioniert diese nur mit dem ersten Byte meiner IP-Adresse.

Delphi-Quellcode:
var
    inAddr: cardinal;
    inAddr_bkup: cardinal;
    Originalbyte: Integer;
    Offsetbyte: integer;
   
begin
    inAddr := inet_addr(PChar(FAdr)); // Umwandeln in Zahl
    inAddr_bkup := inAddr;       // Zahl merken
    pos := pos * 8;       // pos*8(bit) ergibt das gesuchte Byte
    inc(inAddr,count shl pos);       // addieren und dabei den Offset in Byte schieben
    Originalbyte := (inAddr_bkup and $FF000000) shr (pos);    // Wert des Originalbyte bestimmen
    Offsetbytet := ((inAddr and $FF000000) shr (pos));    // Wert des Bytes mit Offset bestimmen
    if Offsetbyte = Originalbyte + count then   // Wenn Offsetbyte = Originalbyte+Offset
      result := inet_ntoa(in_Addr(inAddr)) // zurückwandeln
    else showmessage('Offset zu groß') // sonst Fehlermeldung
end;
Edit:

Es hat doch noch funktioniert

mit deiner zweiten Methode geht

Delphi-Quellcode:
var
    inAddr: cardinal;
    inAddr_bkup: cardinal;
    Originalbyte: Integer;
    Offsetbyte: integer;
   
begin
    inAddr := inet_addr(PChar(FAdr)); // Umwandeln in Zahl
    inAddr_bkup := inAddr;       // Zahl merken
    pos := pos * 8;       // pos*8(bit) ergibt das gesuchte Byte
    inc(inAddr,count shl pos);       // addieren und dabei den Offset in Byte schieben
   Originalbyte := (inAddr_bkup and ($FF shl (pos)) shr (pos)); // Wert des Originalbyte bestimmen    
    Originalbyte := (inAddr and ($FF shl (pos)) shr (pos));     // Wert des Bytes mit Offset bestimmen    
    if Offsetbyte = Originalbyte + count then   // Wenn Offsetbyte = Originalbyte+Offset
      result := inet_ntoa(in_Addr(inAddr)) // zurückwandeln
    else showmessage('Offset zu groß') // sonst Fehlermeldung
end;
Ist aber bestimmt nicht so gelöst wie du das dachtest, oder?
  Mit Zitat antworten Zitat