Hallo zusammen,
ich habe ein sehr seltsames Phänomen, bei dem ich einfach nicht weiter komme. In einer Anwendung müssen IP-Adressen in dezimale Werte umgerechnet werden. Das funktioniert ja nach der Formel
A*256^3+B*256^2+C*256^1+D*256^0
So weit so gut. Die Formel habe ich zunächst mit dem Datentyp Long ausprobiert, da funktionierte noch alles. Leider reicht der Typ nunmal nicht aus, um Zahlen bis 2^32 darzustellen, also habe ich zum Datentyp "Single" gewechelt.
Seit dem rechnet Notes aber falsch. Es geht um folgendes Script:
strIP = "188.98.224.99"
sngTmp1 = Csng(StrToken(strIP,".",1)) * 256 ^ 3
sngTmp2 = Csng(StrToken(strIP,".",2)) * 256 ^ 2
sngTmp3 = Csng(StrToken(strIP,".",3)) * 256
sngTmp4 = CSng(StrToken(strIP,".",4))
sngIp = sngTmp1 + sngTmp2 + sngTmp3 + sngTmp4
Print "Ergebnis dezimal: " + CStr(Round(sngIP,0))
Print "Rechnung ist aber: " + CStr(Round(sngTmp1,0)) + " + " + CStr(Round(sngTmp2,0)) + " + " + CStr(sngTmp3) + " + " + CStr(sngTmp4)
Ich habe schon viel getestet. Er verrechnet sich immer im letzten Schritt, also wenn sngTmp4 hinzugerechnet wird. Die Round-Befehle sind wegen der Darstellung als Text drin (sonst ist die Darstellung ala "e hoch irgedwas") und tun bei der Rechnung als solches nichts zur Sache.
Beispielrechnung: Bei der IP 188.98.224.99 wird das Ergebnis 3160596480 geliefert. Gerechnet wird 3154116608 + 6422528 + 57344 + 99. Das korrekte Ergebnis wäre also 3160596579.
Was passiert da? Bin für jeden Tipp zu haben!
Danke, Bernd