Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Hex to decimal

by busunsl (Vicar)
on Apr 26, 2001 at 00:28 UTC ( [id://75608]=note: print w/replies, xml ) Need Help??


in reply to Hex to decimal

Have a look at the unpack function.

perdoc -f unpack

Replies are listed 'Best First'.
Re: Re: Hex to decimal
by Ras (Acolyte) on Apr 26, 2001 at 00:46 UTC
    I'm sorry i made an mistake i want to convert hex FFAA into dec -86. How can i do this using perl and please can you show me some syntax?

      D:\Perl\dl>perl -e "print unpack('s',pack 's', hex('ffaa'))" -86
      This:
      • takes the string 'ffaa' and makes a decimal value with hex
      • packs that value into a signed short
      • unpacks that structure as a signed short
      • and prints it

      --
      I'd like to be able to assign to an luser

        Note that pack/unpack were not useful in converting from hex to decimal (unlike most people seem to think) but were used here to convert from unsiged to signed-short.

        Also, sprintf isn't useful for converting from hex to decimal but is the proper choice for going the other direction.

        Update: Ah, thanks merlyn; I didn't think of that way to use pack/unpack to convert hex to decimal. To convert without having to worry about little-/big-endian issues gets rather complicated when using pack/unpack and signed values:

        my $hex= "FFAA"; my $signed= unpack "s", pack "S", unpack "v", pack "H*", $hex;
        and it gets even more complicated if you want to handle different numbers of hex digits:
        my $hex= "ABC"; my $unsigned= unpack "V", pack "h*", "".reverse "00000000".$hex; my $signed= unpack "l", pack "L", unpack "V", pack "h*", "".reverse( ( $hex=~/^[89a-f]/i ? "F" : "0" ) x 8 . $hex );

                - tye (but my friends call me "Tye")
        You can skip the hex step with:
        perl -e 'print unpack "s", pack "H*", "ffaa"'
        If that's wrong on your system, it's an endian problem. {grin} So you can also try:
        print unpack "s", pack "h*", scalar reverse "ffaa";
        which does print -86 on my machine.

        -- Randal L. Schwartz, Perl hacker

      $signed = (hex(ffaa)^0x8000)-0x8000;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://75608]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (2)
As of 2024-04-26 05:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found