* Joachim Ziegler wrote/schrieb:
> das geht sehr einfach mit dem "Horner-Schema", dem schnellsten algorithmus,
> ein polynom auszuwerten (hey, ein algorithmus!): betrachte $ip als polynom
> zur basis 256, die einzelnen bytes sind dann die koeffizienten:
>
> --------- wandler.pl -------------------------
> $ip = q/192.168.1.1/;
> @array = split /\./, $ip; # wie von soeren
>
> $dec=0;
>
> for($i=0;$i<@array;$i++) {
> $dec = ($dec*256) + $array[$i];
> }
>
> print $dec;
> -------------------------------------------------
>
> ausgabe: 3232235777
Sehr sch�n, danke. :-) Ich habe das mal f�r mein Progr�mmchen an meinen
schlechten Programmierstil angepa�t:
foreach(split /\./, $ip){
$dec=($dec <<8) + $_;
}
> der umgekehrte weg: division mit rest anwenden, d.h. in jeder iteration modulo
> 256 rechnen. das ergibt die jeweils n�chste ziffer von hinten (in
> 256-adischer darstellung). ziffern sammen und umgekehrt ausgeben (in hex).
>
> -------------wandler2.pl------------------
> $dec=3232235777;
>
> while($dec!=0) {
> $letzte_ziffer = $dec % 256;
> push @tmp,$letzte_ziffer;
> $dec = int($dec / 256); # letzte ziffer abschneiden
> }
>
> for($i=@tmp-1;$i>=0;$i--) { # r�ckw�rts ausgeben
> printf "%x.",$tmp[$i]
> }
> ---------------------------------------------
>
> ausgabe: c0.a8. 1. 1. (daran musst du noch feilen)
Wenn man das oben erstmal hinter sich hat, gehts dann pl�tzlich ganz
simpel:
while ($dec){
unshift @ip, ($dec % 256);
$dec = $dec >>8;
}
print join(".", @ip)."\n";
Hier ist Modulo das kleinere �bel. Man k�nnte alternativ schreiben, um das
Bild von den geschobenen Bits zu behalten:
unshift @ip, ($integer - (($integer >> 8) << 8)); # W�rg!
(Oder kann man die Bits, die beim Shiften rechts rausfallen, irgendwie
auffangen?)
So richtig elegant finde ich aber keine der beiden L�sungen (aufgrund der
Schleifen), auch wenn ich sie beide mal so verwenden werde. Ich hatte
eigentlich einen wilden Einzeiler mit pack/unpack erwartet. ;-)
Dankesch�n!
-martin
--
0 and 1. Now what could be so hard about that?
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org