Funkcja hex() w Perl

W języku programowania Perl jest wbudowana funkcja hex().

Funkcja hex() konwertuje liczbę z szesnastkowy formatu w десятеричный.

Oto przykład:

▶ Run
#!/usr/bin/perl

print hex('0xFF');

Program wypisze na ekran 255.

Argumenty

W przypadku, gdy funkcje hex nie zostały przekazane żadne argumenty, to funkcja działa z дефолтной zmiennej $_:

▶ Run
#!/usr/bin/perl

$_ = '0x100';

print hex(); # 256

W przypadku, gdy w zmiennej $_ jest undef i jest używany use warnings;, to będzie ostrzeżenie:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Standardowe korzystanie z funkcji hex() — to jej podać jeden argument.

Jeśli przekazać funkcji hex() więcej niż jeden argument, to będzie błąd i wykonywanie kodu zostanie zatrzymane.

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

Jeśli chcesz przekonwertować wiele wartości, to można użyć map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { hex } @hex;

warn Dumper \@dec;

Wiersz może zaczynać się od 0x, ale nie jest to konieczne. Wielkość liter wartości nie ma.

Oto kilka przykładów. W tym przykładzie wszystkie odwołania do funkcji hex()zwracają jedno i to samo znaczenie — liczba 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');

Funkcja nie jest w stanie pracować z ułamków hexadecimal liczbami. Podczas próby przekonwertowania to liczba będzie ostrzeżenie:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Wartość zwracana

Funkcja hex() zawsze zwraca liczbę.

Oficjalna dokumentacja

Oto wynik polecenia 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".

Tematy pokrewne

Inne artykuły