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?