-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[5] Come si effettuano le conversioni tra rappresentazioni numeriche?

Come sempre con il Perl, c'è più di un modo di fare le cose. Più sotto ci sono alcuni esempi di approcci per effettuare delle comuni conversioni tra rappresentazioni numeriche. Tutto ciò è da intendersi a titolo esemplificativo piuttosto che esaustivo.

Alcuni degli esempi qui sotto usano il modulo Bit::Vector da CPAN. La ragione per cui potreste scegliere Bit::Vector rispetto alle funzioni incorporate in perl è che lavora con numeri di OGNI dimensione, che è ottimizzato per la velocità su certe operazioni e che, almeno per qualche programmatore, la notazione usata potrebbe essere familiare.

  • Come si convertono esadecimali in decimali

    Usando la conversione incorporata in perl della notazione 0x:

         $dec = 0xDEADBEEF;

    Usando la funzione hex:

         $dec = hex("DEADBEEF");

    Usando pack:

         $dec = unpack("N", pack("H8", substr("0" x 8 . "DEADBEEF", -8)));

    Usando il modulo Bit::Vector da CPAN:

         use Bit::Vector;
         $vec = Bit::Vector->new_Hex(32, "DEADBEEF");
         $dec = $vec->to_Dec();
  • Come si converte da decimale ad esadecimale

    Usando sprintf:

        $esa = sprintf("%X", 3735928559); # maiuscole A-F
        $esa = sprintf("%x", 3735928559); # minuscole a-f

    Usando unpack:

         $esa = unpack("H*", pack("N", 3735928559));

    Usando Bit::Vector:

         use Bit::Vector;
         $vet = Bit::Vector->new_Dec(32, -559038737);
         $esa = $vet->to_Hex();

    Bit::Vector supporta conteggi di bit arbitrari:

         use Bit::Vector;
         $vet = Bit::Vector->new_Dec(33, 3735928559);
         $vet->Resize(32); # elimina gli 0 iniziali se non sono voluti
         $esa = $vet->to_Hex();
  • Come si converte da ottale a decimale

    Usando la conversione incorporata in perl di numeri con 0 iniziali:

         $dec = 033653337357; # notate lo 0 iniziale!

    Usando la funzione oct:

         $dec = oct("33653337357");

    Usando Bit::Vector:

        use Bit::Vector;
        $vet = Bit::Vector->new(32);
        $vet->Chunk_List_Store(3, split(//, reverse "33653337357"));
        $dec = $vec->to_Dec();
  • Come si converte da decimale ad ottale

    Usando sprintf:

         $ott = sprintf("%o", 3735928559);

    Usando Bit::Vector:

         use Bit::Vector;
         $vet = Bit::Vector->new_Dec(32, -559038737);
         $ott = reverse join('', $vet->Chunk_List_Read(3));
  • Come si converte da binario a decimale

    Il Perl 5.6 permette di scrivere numeri binari direttamente con la notazione 0b:

    	$numero = 0b10110110;

    Usando oct:

        my $input = "10110110";
        $decimale = oct( "0b$input" );

    Usando pack e ord:

         $decimale = ord(pack('B8', '10110110'));

    Usando pack e unpack per stringhe di grandi dimensioni:

         $int = unpack("N", pack("B32",
         substr("0" x 32 . "11110101011011011111011101111", -32)));
         $dec = sprintf("%d", $int);
         # substr() e` usata per allungare la stringa con degli zeri
         # a sinistra per portarla a 32 caratteri

    Usando Bit::Vector:

         $vet = Bit::Vector->new_Bin(32, "11011110101011011011111011101111");
         $dec = $vet->to_Dec();
  • Come si converte da decimale a binario

    Usando sprintf (perl 5.6+):

        $bin = sprintf("%b", 3735928559);

    Usando unpack:

         $bin = unpack("B*", pack("N", 3735928559));

    Usando Bit::Vector:

         use Bit::Vector;
         $vet = Bit::Vector->new_Dec(32, -559038737);
         $bin = $vet->to_Bin();

    Le rimanenti trasformazioni (ad es. esa -> ott, bin -> esa, ecc.) sono lasciate come esercizio al lettore volenteroso.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google