Am Samstag, 21. September 2002 12:43 schrieb Martin Schmitt:
> Hi!
>
> Ich suche nach einer M�glichkeit, mittels Perl die folgende Konvertierung
> vorzunehmen:
>
> 192.168.1.1 -> 0C.A8.01.01 -> 0CA80101 -> 212336897  (und wieder zur�ck)

das muss "C0" heissen, daher ist obiges ergebnis falsch!

>

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

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)


hoffe, geholfen zu haben

joachim
-- 
Diese Nachricht von Joachim Ziegler haben Sie aus seinem $HOME erhalten
WWW: http://www.algorilla.de   E-Mail: [EMAIL PROTECTED]
Lesen Sie mein Buch "Programmieren lernen": www.algorilla.de/PLMP

"Die in Umfragen und Wahlen ge�u�erten Meinungen repr�sentieren die
niedrigste, nicht die h�chste Ebene menschlicher Urteilsf�higkeit"
(Erich Fromm)

----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an