Funzione hex() in Perl

Nel linguaggio di programmazione Perl ci sono built-in funzione di hex().

Funzione hex() converte un numero da formato esadecimale in decimale.

Ecco un esempio:

▶ Run
#!/usr/bin/perl

print hex('0xFF');

Il programma visualizzerà 255.

Argomenti

Nel caso in cui la funzione hex non trasmessi gli argomenti, la funzione lavora con di default della variabile $_:

▶ Run
#!/usr/bin/perl

$_ = '0x100';

print hex(); # 256

Nel caso in cui in una variabile $_ si trova undef e viene utilizzato use warnings;, ci sarà un avvertimento:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $dec = hex();
Use of uninitialized value $_ in hex at script.pl line 6.

L'uso standard di funzioni hex() è darle un argomento.

Se trasferire la funzione hex() è più di un argomento, quello è un errore e l'esecuzione di codice verrà interrotta.

Too many arguments for hex at script.pl line 3, near "2)"
Execution of script.pl aborted due to compilation errors.

Se si desidera convertire più valori, è possibile utilizzare map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @hex = ('0xA', '0xB', '0x11');

my @dec = map { hex } @hex;

warn Dumper \@dec;

La stringa può iniziare con 0x, ma non è necessario. Tra maiuscole e minuscole valori non ha.

Ecco alcuni esempi. In questo esempio tutti i casi alla funzione hex()restituiscono lo stesso valore — il numero di 2748.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

say hex('0xABC');
say hex('0XABC');
say hex('0xabc');
say hex('XABC');
say hex('xABC');
say hex('abc');
say hex('AbC');

La funzione non è in grado di lavorare con le frazioni di numeri esadecimali. Quando si tenta di convertire tale il numero sarà un avvertimento:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print hex('0x10.8');
Illegal hexadecimal digit '.' ignored at script.pl line 6.
16

Il valore restituito

Funzione hex() restituisce sempre il numero.

La documentazione ufficiale di

Ecco l'output del comando perldoc -f hex:

    hex EXPR
    hex     Interprets EXPR as a hex string and returns the corresponding
            numeric value. If EXPR is omitted, uses $_.

                print hex '0xAf'; # prints '175'
                print hex 'aF';   # same
                $valid_input =~ /\A(?:0?[xX])?(?:_?[0-9a-fA-F])*\z/

            A hex string consists of hex digits and an optional "0x" or "x"
            prefix. Each hex digit may be preceded by a single underscore,
            which will be ignored. Any other character triggers a warning
            and causes the rest of the string to be ignored (even leading
            whitespace, unlike "oct"). Only integers can be represented, and
            integer overflow triggers a warning.

            To convert strings that might start with any of 0, "0x", or
            "0b", see "oct". To present something as hex, look into
            "printf", "sprintf", and "unpack".

Temi correlati

Altri articoli