Am 16.08.2013 18:50, schrieb Peter Müller:
> In Mathe war ich schon immer schwach:
> Ich möchte eine Zahl in eine IP umwandeln.
>
> ID = "2469417810"
> Die dazugehörige IP wäre 82.83.48.147
>
> a = Int(ID / 256 ^ 3) 'ist das letzte Oktett
> b = Int(ID - a * 256 ^ 3) / 256 ^ 2 'ist das vorletzte Oktett
> c = Int(ID - a * 256 ^ 3 - b * 256 ^ 2) / 256 'ist das zweite Oktett
> d = Int(ID - a * 256 ^ 3 - b - c * 256 ^ 2) / 256 'ist das erste Oktett
>
> IP = d & "." & c & "." & b & "." & a
>
> Int steht für Integer (Ganzzahl)
> Die Werte für a, b und c sind ok
> Ich bekomme es aber für d nicht hin.
> Das Ergebnis in d sollte 82 sein.
>
> Gruß
> Peter
>
Rein mathematisch:
Die Dezimalzahl 2469417810 wird ins eine im 256"-System umgewandelt
(Horner-Schema)
Gehe nach folgendem Verfahren vor:
(1) Teile die Zahl mit Rest durch 256.
(2) Der Divisionsrest ist die nächste "Zahl" (von rechts nach links).
(3) Falls der (ganzzahlige) Quotient = 0 ist, bist du fertig,
andernfalls nimm den (ganzzahligen) Quotienten als neue Zahl
und wiederhole ab (1).
2469417810 : 256 = 9646163 Rest: 82
9646163 : 256 = 37680 Rest: 83
37680 : 256 = 147 Rest: 48
147 : 256 = 0 Rest: 147
Resultat: 82.83.48.147
Als Gleichungen (für Programme?)
d = (ID/256 - INT(ID/256) * 256 Rest
ID_c = ID/256 - (ID/256 - INT(ID/256) Divisionsrest
c = (ID_c/256 - INT(ID_c/256) * 256 Rest (neu)
ID_b = ID_c/256 - (ID_c/256 - INT(ID_c/256) Divisionsrest (neu)
b = (ID_b/256 - INT(ID_b/256) * 256 Rest (neu)
ID_a = ID_b/256 - (ID_b/256 - INT(ID_b/256) Divisionsrest (neu)
a = (ID_a/256 - INT(ID_a/256) * 256 Rest (neu)
ID_0 = ID_0/256 - (ID_0/256 - INT(ID_0/256) Divisionsrest (neu)
Anmerkungen:
Die letzte Zeile kann gut zur Fehlerkontrolle (<>0) genutzt werden.
Das Programm ließe sich noch leichter rekursiv schreiben mit einer
Zählvariablen, z.B. i, Start für die Ausgangsvariablen ID mit ID_i und
i=3, also ID_3
bei jedem Durchlauf der Schleife i um 1 reduzieren, bei einer
Fußkontrolle könnte bei Null gestoppt werden.
Denkbar wäre auch eine Umsetzung mit Zellen (Datenbank, Tabelle), dann
kann man hinterher auch leicht dort die Ergebnisse auslesen.