Search code examples
perlhex

How can I convert hex strings into numbers in Perl?


I recently wrote a script which parsed a text representation of a single binary byte month field.

(Don't ask :-{ )

After fiddling with sprintf for a while I gave up and did this;

our %months = qw / x01 1 
       x02 2
       x03 3 
       x04 4 
       x05 5 
       x06 6 
       x07 7 
       x08 8 
       x09 9 
       x0a 10 
       x0b 11 
       x0c 12 /;
...
my $month = $months{$text};

Which I get away with, because I'm only using 12 numbers, but is there a better way of doing this?


Solution

  • If you have

    $hex_string = "0x10";
    

    you can use:

    $hex_val = hex($hex_string);
    

    And you'll get: $hex_val == 16

    hex doesn't require the "0x" at the beginning of the string. If it's missing it will still translate a hex string to a number.

    You can also use oct to translate binary, octal or hex strings to numbers based on the prefix:

    • 0b - binary
    • 0 - octal
    • 0x - hex