Funktion hex() i Perl

I programmeringssproget Perl har en indbygget funktion hex().

Funktion hex() konverterer et tal fra hexadecimal-format til decimal.

Her er et eksempel:

▶ Run
#!/usr/bin/perl

print hex('0xFF');

Programmet vil vise 255.

Argumenter

Hvis funktionen hex ikke gives ingen argumenter, den fungerer med standard variable $_:

▶ Run
#!/usr/bin/perl

$_ = '0x100';

print hex(); # 256

I dette tilfælde, hvis den variable $_ er undef og anvendes use warnings;, vil advarsel:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Standard hjælp hex() er at give det et enkelt argument.

Hvis overførslen funktion hex() mere end ét argument, vil det være en fejl og kode vil blive stoppet.

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

Hvis du har brug for at konvertere flere værdier, kan du bruge map:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

my @dec = map { hex } @hex;

warn Dumper \@dec;

Strengen kan begynde med 0x, men ikke nødvendigvis. Case-sensitive værdier er ikke har.

Her er et par eksempler. I dette eksempel er alle kaldet til den funktion hex()tilbage den samme værdi af — nummer 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');

En funktion kan ikke arbejde med fraktioneret hexadecimale tal. Når du forsøger at konvertere en sådan antallet af advarslen:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Return værdi

Funktion hex() altid returnerer et tal.

Officiel dokumentation

Her er outputtet af kommandoen 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".

Relaterede emner

Andre artikler